我刚开始学习F#.在几个F#编码示例中,我看到以下列方式使用关键字"in":
let doStuff x = let first, second = x in first + " " + second
该功能在第二行的末尾使用和不使用"in"."in"有什么作用?
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
只能被绑定后的in
关键字.
在后一种情况下,正常的变量范围规则生效,因此变量在声明后立即生效.
希望这能说明问题.通常,您应始终使用不带 的版本,in
并#light
在F#源文件的开头指定
这是SO上的另一个相关主题,也可能有用:
F# - 我应该在有或没有#light的情况下学习吗?
从这里引用.
启用灯光语法选项时,"输入"是可选的.'let'定义的'='之后的标记开始一个新块,其中预解析器在每个'let'绑定之间插入一个隐式的分隔'in'标记,该绑定从该标记开始于同一列.
如果没有光语法选项,通常需要"输入".使用light syntac选项时,'in'是可选的.
所以我猜你正在使用轻量级语法.