在研究OCaml时,我发现我确定会抛出异常,但返回的值是1。
let x = 1 in
let f y = x in
let x = 2 in
f 0;;
如果我依次考虑,好的,x
取值为1。然后,在较低的上下文中,我们说f y = x
。由于未定义y
,因此我认为编译器应该在此处引发异常。即使定义了y
,如果它像Haskell这样的绑架行为,我也认为这可能会“在f
处定义y
。但是我不希望它为其他值定义f
。
所以我似乎对此工作有点困惑。
答案 0 :(得分:2)
OCaml中的变量不会更改值,它们是不可变的。您的代码定义了两个名为x
的不同事物。函数f
始终使用第一个定义。当您定义具有相同名称的新值时,这对f
无效。
您说let f y = x
是在定义 y
,而不是指先前的y
。您为y
的参数赋予名称f
,然后可以在f
的定义中使用它(尽管您的代码选择不使用y
,很好)。