我一直在努力理解“ in”指令的工作方式,几天后我进行了一次考试,尽管我对ocaml的工作方式非常有信心,但以前的很多考试使我对据我所知ocaml是一种静态作用域语言,因此存在一些范围界定问题,因此,例如,如果您声明了一个值并在函数内部使用了它(当然不将其作为参数传递),即使您覆盖了该函数的值仍将使用上一个,例如
let a = 5;;
let f x = a+x;;
let a = 1;;
f 1;;
即使a值已被覆盖,也会返回6,但是考试中有一些非常简单的问题,例如
let a = 6 in
let b x = a + x in
let a = 42 in
b a;;
这个让我很困惑,“输入”是如何工作的?我知道这将返回48,但是我很努力地看到一种模式,可以用来理解使用“ in”指令时作用域的工作原理。
任何解释将不胜感激
预先感谢:D
答案 0 :(得分:1)
即使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;;