以下F#片段似乎只有在ML兼容模式下编译时才有效(运行here):
let i = (1 lxor 5)
但是,我无法在Visual Studio 2012中的普通项目中编译它,或者在命令行中使用fsc.exe。我收到错误:
错误FS0039:未定义值或构造函数'lxor'
阅读F#规范说
虽然F#保留了几个OCaml关键字供将来使用,但/ mlcompatibility选项允许将这些关键字用作标识符。
然后将lxor
列为一个此类运算符。所以我尝试了命令行fsc.exe Program.fs --mlcompatibility
(版本11.0.60610.1),但它仍然得到同样的错误。
fsc.exe
的文档似乎表明mlcompatbility
选项仅忽略警告。我没有在VS中的fsc文档或项目选项中看到任何其他相关选项以启用兼容性。
关于F#/ ML兼容性的所有其他SO问题似乎与可以使用哪种语言结构有关,但我正在寻找的是如何在兼容模式下实际编译。我是否必须打开特定的命名空间,引用另一个程序集或执行其他操作?
更新
我也尝试在Ubuntu 13.04上的Mono上使用开源编译器fsharpc
(F#3.0)。结果与fsc
相同。
答案 0 :(得分:1)
在非Windows系统上调用fsc
(fsharpc
)时,编译器选项位于源文件名之前。因此,调用它的正确方法是:
fsc -o:MyProgram.exe --mlcompatibility Program.fs
使用Visual Studio进行编译时,您可以进入项目的属性并将--mlcompatibility
添加到Other flags
框中:
答案 1 :(得分:1)
--mlcompatibility
选项仅关闭警告,因此这看起来像回归。您可以通过搜索来源mlcompatibility
https://github.com/fsharp/fsharp/search?q=mlCompatibility&type=Code的所有引用来验证这一点。