代码之家  ›  专栏  ›  技术社区  ›  Addem

ocaml:为什么在没有定义变量的情况下进行编译?

  •  0
  • Addem  · 技术社区  · 7 年前

    在研究ocaml时,我发现这段代码肯定会引发异常,但它返回值1。

      let x = 1 in 
      let f y = x in 
      let x = 2 in 
      f 0;;
    

    如果我按顺序考虑,好的, x 取值1。然后在较低的上下文中,我们说 f y = x . 自从 y 没有定义,我想编译器应该在这里抛出一个异常。即使 Y 被定义了,我想这可能会“定义 f Y “如果它像哈斯克尔一样绑架。但我不希望它能定义 f 其他值。

    所以我似乎有点困惑这是如何工作的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jeffrey Scofield    7 年前

    OCAML中的变量不会改变值,它们是不可变的。你的代码定义了两个 不同的 物名 x . 函数 f 始终使用第一个定义。当您定义一个同名的新值时,这对 f .

    当你说 let f y = x 你是 定义 y ,不指以前的 Y . 你说的是名字 Y 到的参数 f ,然后可用于定义 f (尽管您的代码选择不使用 Y 很好)。

    推荐文章