F#中关键字“in”的含义

时间:2009-02-13 15:07:10

标签: .net f#

我刚开始学习F#。在几个F#编码示例中,我看到以下列方式使用关键字“in”:

let doStuff x =
    let first, second = x in
    first + " " + second

该功能在第二行的末尾使用和不使用“in”。 “in”有什么作用?

3 个答案:

答案 0 :(得分:34)

in是来自F#的OCaml根的宿醉,它指定绑定的变量,这些变量与变量范围略有不同。

考虑变量绑定如下;你有一个表达式:

first + " " + second

因为firstsecond未绑定 - 它们没有任何固定值 - 因此表达式目前没有具体值。使用

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选项时可选   使用。

所以我猜你正在使用轻量级语法。