我正在学习F#,到目前为止我很享受.几乎所有在线示例都使用轻量级语法(#light); 但是,在大多数情况下,也会对所述示例进行评论.
使用#light启用还是禁用来学习F#会更好吗?我打算最终学习它没有开启,但我很好奇是否在开始学习它或者在我更熟悉核心语言之后应用它.
我绝对更喜欢用#light语法学习F#.非轻量版本有时用于理解有关F#语法的一些技巧,但#light语法为您提供了非常愉快的体验.
例如 - 使用#light
let add a b c = let ab = a + b printfn "%d" ab c - ab
使用非光可以写出像这样的东西:
let add a b c = let ab = a + b in // 'in' keyword specifies where the binding (value 'ab') is valid printfn "%d" ab; // ';' is operator for sequencing expressions c - ab;; // ';;' is end of a function declaration
例如,这表明您不能写如下:
let doNothing a b = let sum = a + b in
最后有一个'in'关键字,但该函数没有任何正文(因为'in'后面没有表达式).在这种情况下,非轻量级语法有时很有用,可以理解正在发生的事情......但正如您所看到的,#light代码更简单.
"#light"可能会成为该语言未来版本的默认设置,因此我会这样学习.我认为除了OCaml兼容性之外,任何人都很少使用较重的语法(在交叉编译时,或者因为坐在键盘上的人知道OCaml并且正在向F#过渡更平滑).
因为我从OCaml书中学到了F#(我使用OCaml模式为Emacs编辑F#代码),我更喜欢使用"重"语法.我使用过#light代码,当然大多数F#示例都是使用light语法编写的,所以对它有一些熟悉程度是很有用的.也就是说,从重量级转换为轻量级比使用其他方式更容易,因此使用繁重的语法学习它当然不是一个坏主意.
我偶然遇到了一个令人烦恼的错误,重型语法被视为二等公民(组合被破坏了计算表达式,一对夫妇发布回来),但这些很少见.一般来说,我认为差异不是很大,我需要仔细查看单独查看代码时使用的语法.因人而异.