Ocaml “in”指令嵌套是如何工作的?

Ocaml “in”指令嵌套是如何工作的?,ocaml,Ocaml,我正在努力理解教学中的工作方式,几天后我就要考试了,尽管我对ocaml的工作方式很有信心,但之前有很多考试让我想到了一些范围问题,据我所知,ocaml是一种静态范围语言,例如,如果您声明一个值,并在函数中使用它,而不将其作为参数传递,那么当然,即使您覆盖了该值,函数仍将使用前一个值,例如 let a = 5;; let f x = a+x;; let a = 1;; f 1;; let a = 6 in let b x = a + x in let a = 42 in b a;; 将返回6,

我正在努力理解教学中的工作方式,几天后我就要考试了,尽管我对ocaml的工作方式很有信心,但之前有很多考试让我想到了一些范围问题,据我所知,ocaml是一种静态范围语言,例如,如果您声明一个值,并在函数中使用它,而不将其作为参数传递,那么当然,即使您覆盖了该值,函数仍将使用前一个值,例如

let a = 5;;
let f x = a+x;;
let a = 1;;
f 1;;
let a = 6 in
let b x = a + x in
let a = 42 in
b a;;
将返回6,即使a值已被覆盖,但考试中有一些非常粗略的问题,例如

let a = 5;;
let f x = a+x;;
let a = 1;;
f 1;;
let a = 6 in
let b x = a + x in
let a = 42 in
b a;;
这一条让我很困惑,这条路怎么走?我知道这返回48,但我很难看到一种模式,当您使用in指令时,我可以用它来理解作用域是如何工作的

任何解释都将不胜感激

提前感谢:D

即使a值已被覆盖,仍将返回6

它没有被覆盖。您可以使用相同的名称创建一个新变量。也就是说,你不改变现有的变量-你创建了一个新的变量,它隐藏了现有的变量。结果是:

let a1 = 5;;
let f x = a1 + x;;
let a2 = 1;;
f 1;;
在第二个示例中也是如此:

let a1 = 6 in
let b x = a1 + x in
let a2 = 42 in
b a2;;

哦,哇,现在这更清楚了,不管怎样,我还是很难理解in指令,比如,一个变量是如何被另一个变量访问的?是在入园前还是入园后?你有什么好的资源来解释它是如何工作的吗?无论如何,非常感谢你的宝贵回答:欢迎你。我不确定我是否理解这个问题:你写让x=。。在expr中,现在x可以在expr中使用。我不确定它是否有用,但你可以检查一下:是的,很抱歉,我可能问得不太好,但你设法理解了问题,并且给出了我想要的答案,我一定会检查你提供的资源,再次感谢:D