我正在学习F#,到目前为止我很享受。几乎所有在线示例都使用轻量级语法(#light);但是,在大多数情况下,也会就上述例子给出评论。
使用#light启用还是禁用来学习F#是否更好?我打算最终学习它没有开启,但我很好奇是否在开始时学习它或者在我更熟悉核心语言之后应用它。
答案 0 :(得分:35)
我绝对更喜欢用#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代码更简单。
答案 1 :(得分:10)
“#light”可能会成为该语言未来发行版的默认设置,所以我会这样学习。我认为除了OCaml兼容性之外,任何人都很少使用较重的语法(无论是在交叉编译时,还是因为坐在键盘上的人都知道OCaml并且正在向F#过渡更顺畅)。
答案 2 :(得分:5)
因为我从OCaml书中学到了F#(我使用OCaml模式为Emacs编辑F#代码),所以我更喜欢使用“重”语法。我使用过#light代码,当然大多数F#示例都是使用light语法编写的,所以对它有一些熟悉程度是很有用的。也就是说,从重量级转换为轻量级比使用其他方式更容易,因此使用繁重的语法学习它当然不是一个坏主意。
我偶然遇到了一个令人烦恼的错误,即重度语法被视为二等公民(组合被破坏了计算表达式,一对夫妇发布回来),但这些很少见。一般来说,我认为差异不是很大,我需要仔细查看单独查看代码时使用的语法。 YMMV。
答案 3 :(得分:1)
如果我没记错的话,预订“专家C#”会提到#light将是F#发布时的默认设置,而非轻量语法仅用于兼容性。