【问题标题】:How does Ocaml variable scope work?Ocaml 变量作用域如何工作?
【发布时间】:2012-05-21 22:49:03
【问题描述】:

我开始学习 Ocaml,使用 hickey book,我被困在练习 3.4,第 9 部分

让 x x = x + 1 在 x 2

运行的结果是3,但是我不明白为什么?

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    当您编写 let x x = ... 时,您正在定义一个名为 x 的函数,它将名称 x 绑定到它的参数。

    由于您使用let 而不是let rec,因此该函数不知道自己的名称,因此据它所知,唯一值得了解的x 是作为参数传入的那个。

    因此,当您使用x 2 调用函数时,它会将值2 绑定到名称x 并计算x+1,得到3 作为结果。

    【讨论】:

    • 谢谢,我不知道函数和参数可以同名。
    • 他们可以,但显然你应该永远,永远在实际代码中这样做:) (事实上,这甚至适用于let rec而不是let,并且有可能会更加混乱......)
    • 当您意识到let x x = e 只是let x = (fun x -> e) 的简写时,就会更容易理解为什么会这样。
    • 好在let rec x x = ... 变成了let rec x = (function x -> ...) 显然等价于let x = (function x -> ...)
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2012-02-21
    • 2015-04-17
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多