F# - 我应该在有或没有#light的情况下学习吗?

Jam*_*ers 31 f#

我正在学习F#,到目前为止我很享受.几乎所有在线示例都使用轻量级语法(#light); 但是,在大多数情况下,也会对所述示例进行评论.

使用#light启用还是禁用来学习F#会更好吗?我打算最终学习它没有开启,但我很好奇是否在开始学习它或者在我更熟悉核心语言之后应用它.

Tom*_*cek 36

我绝对更喜欢用#light语法学习F#.非轻量版本有时用于理解有关F#语法的一些技巧,但#light语法为您提供了非常愉快的体验.

例如 - 使用#light

let add a b c = 
  let ab = a + b
  printfn "%d" ab
  c - ab
Run Code Online (Sandbox Code Playgroud)

使用非光可以写出像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

例如,这表明您不能写如下:

let doNothing a b = 
  let sum = a + b in 
Run Code Online (Sandbox Code Playgroud)

最后有一个'in'关键字,但该函数没有任何正文(因为'in'后面没有表达式).在这种情况下,非轻量级语法有时很有用,可以理解正在发生的事情......但正如您所看到的,#light代码更简单.

  • 缩进,或括号,或......除了“in”或“;”之外,还有很多方法可以传达范围 或其他分隔符标记。在经历了最初的后坐反应之后,大多数人发现重要的空白是很好的。 (2认同)
  • @Brian:除非你是盲人,在这种情况下用空格很重要的语言编程是相当乏味的:http://stackoverflow.com/questions/118643/ (2认同)

Bri*_*ian 11

"#light"可能会成为该语言未来版本的默认设置,因此我会这样学习.我认为除了OCaml兼容性之外,任何人都很少使用较重的语法(在交叉编译时,或者因为坐在键盘上的人知道OCaml并且正在向F#过渡更平滑).


Der*_*ger 5

因为我从OCaml书中学到了F#(我使用OCaml模式为Emacs编辑F#代码),我更喜欢使用"重"语法.我使用过#light代码,当然大多数F#示例都是使用light语法编写的,所以对它有一些熟悉程度是很有用的.也就是说,从重量级转换为轻量级比使用其他方式更容易,因此使用繁重的语法学习它当然不是一个坏主意.

我偶然遇到了一个令人烦恼的错误,重型语法被视为二等公民(组合被破坏了计算表达式,一对夫妇发布回来),但这些很少见.一般来说,我认为差异不是很大,我需要仔细查看单独查看代码时使用的语法.因人而异.