我刚开始学习F#。在几个F#编码示例中,我看到以下列方式使用关键字“in”:
let doStuff x =
let first, second = x in
first + " " + second
该功能在第二行的末尾使用和不使用“in”。 “in”有什么作用?
答案 0 :(得分:34)
in
是来自F#的OCaml根的宿醉,它指定绑定的变量,这些变量与变量范围略有不同。
考虑变量绑定如下;你有一个表达式:
first + " " + second
因为first
和second
未绑定 - 它们没有任何固定值 - 因此表达式目前没有具体值。使用
let (...) in
语法指定这些变量如何在该表达式中绑定,因此您的示例将使用变量替换将该函数减少到
let doStuff x =
x + " " + x
在这个例子中,两种形式都是相同的,但想象如下:
let (x = 2 and y = x + 2) in
y + x
这与
不同let (x = 2 and y = x + 2)
y + x
因为在前一种情况下,x
仅在<{strong> in
关键字后绑定。
在后一种情况下,正常变量作用域规则生效,因此变量在声明后立即生效。
希望能够解决问题。通常,您应始终使用版本 in
并在F#源文件的开头指定#light
答案 1 :(得分:6)
这是SO上的另一个相关主题,也可能有用:
答案 2 :(得分:5)
引用here。
当光语法选项是 enabled'in'是可选的。 '='后的令牌 一个'let'定义开始一个新的块,其中 预解析器插入隐式分隔'in' 开头的每个'let'绑定之间的标记 与该令牌相同的列。
没有光线语法选项'in' 经常需要。 'in'是 light syntac选项时可选 使用。
所以我猜你正在使用轻量级语法。