你什么时候在F#中加上双分号?

rst*_*kly 31 f#

这是一个愚蠢的问题.我一直在读F#上的几本书,找不到什么可以解释你放的时间;; 在发表声明后,我也无法在阅读中找到模式.你什么时候用双分号结束声明?

Tom*_*cek 34

在不应该与OCaml兼容的非交互式F#代码中,您不需要需要双分号.在OCaml兼容模式下,您可以在顶级函数声明的末尾使用它(在最新版本中,您可以通过使用带.ml扩展名的文件或添加#light "off"到顶部来切换到此模式).

如果您fsi.exe在Visual Studio中使用命令行工具或F#Interactive,那么您将使用;;结束F#的当前输入.

当我在StackOverflow(以及我书中的代码示例)中发布代码示例时,我;;在列表中使用时还要显示在F#interactive中评估表达式的结果:

有时将输出显示为列表的一部分也很有用,所以我觉得这个符号很有用,但我从来没有在任何地方解释过,所以你问的很好!


mfe*_*old 9

您是在谈论F#本身还是在F#Interactive中运行F#函数?在F#Interactive ;; 强制执行刚输入的代码.除此之外 ;; 没有任何我所知道的特殊含义


Nat*_*ers 6

在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,否则不是很有启发性).