【问题标题】:OCaml: Why does this compile when the variable is not defined?OCaml:为什么在未定义变量时编译?
【发布时间】:2019-05-25 03:20:48
【问题描述】:

在研究 OCaml 时,我发现这段代码我确信会抛出异常,但它返回的值却是 1。

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

如果我按顺序考虑,好吧,x 取值 1。然后在较低的上下文中,我们说f y = x。由于没有定义y,我认为编译器应该在这里抛出异常。即使定义了y,我认为这可能会“在y 定义f”,如果它的行为类似于Haskell。但我不希望它为其他值定义f

所以我似乎对它的工作原理有点困惑。

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    OCaml 中的变量不会改变值,它们是不可变的。您的代码定义了两个名为x不同 事物。函数f 总是使用第一个定义。当您定义具有相同名称的新值时,这对 f 没有影响。

    当您说let f y = x 时,您定义 y,而不是指之前的y。您将名称y 赋予f 的参数,然后可以在f 的定义中使用(尽管您的代码选择不使用y,这非常好)。

    【讨论】:

    • 哦,所以如果我理解正确的话,那一行基本上说“f 在任何输入上都将是x(即 1)。”
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多