这是一个愚蠢的问题.我一直在读F#上的几本书,找不到什么可以解释你放的时间;; 在发表声明后,我也无法在阅读中找到模式.你什么时候用双分号结束声明?
Tom*_*cek 34
在不应该与OCaml兼容的非交互式F#代码中,您不需要需要双分号.在OCaml兼容模式下,您可以在顶级函数声明的末尾使用它(在最新版本中,您可以通过使用带.ml扩展名的文件或添加#light "off"到顶部来切换到此模式).
如果您fsi.exe在Visual Studio中使用命令行工具或F#Interactive,那么您将使用;;结束F#的当前输入.
当我在StackOverflow(以及我书中的代码示例)中发布代码示例时,我;;在列表中使用时还要显示在F#interactive中评估表达式的结果:
从F#互动列表
> "Hello" + " world!";;
val it : string = "Hello world!"
> 1 + 2;;
val it : int = 3
Run Code Online (Sandbox Code Playgroud)标准F#源代码
let n = 1 + 2
printf "Hello world!"
Run Code Online (Sandbox Code Playgroud)有时将输出显示为列表的一部分也很有用,所以我觉得这个符号很有用,但我从来没有在任何地方解释过,所以你问的很好!
在F#中,唯一;;需要的是在交互模式下结束表达式.
;;从OCaml的过渡中遗留下来,而OCaml又从Caml Light中遗留下来.本来;;是用来终止顶级"短语" -也就是let,type等OCaml的制造;;可选的,因为典型的模块包括一系列的let,并在最后说不定语句来调用主函数语句.如果偏离此模式,则需要将语句与之分开;;.不幸的是,在OCaml中,什么;;是可选的与需要的很难学习.
但是,F#引入了对OCaml语法的两个相关修改:缩进和do.顶级语句必须进入do块内,并且块需要缩进,因此F#始终知道每个顶级语句do以缩进开头并以缩进结束.不再;;需要了.
总的来说,你需要知道的是[O'] Caml的语法很糟糕,而且F#修复了很多问题,但是仍然存在许多令人困惑的向后兼容性.(我相信F#仍然可以编译很多OCaml代码.)
注意:这个答案是基于我对OCaml的经验以及Adam Gent发布的链接(不幸的是,除非你知道OCaml,否则不是很有启发性).
| 归档时间: |
|
| 查看次数: |
4659 次 |
| 最近记录: |