4

以下 F# 片段似乎仅在以 ML 兼容模式编译时才有效(在此处运行):

   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选项仅忽略警告。我在 fsc 的文档或 VS 中的项目选项中没有看到任何其他相关选项以启用兼容性。

关于 F#/ML 兼容性的所有其他 SO 问题似乎都与可以使用哪些语言结构有关,但我所寻找的只是如何在兼容模式下实际编译。我是否必须打开特定的命名空间、引用另一个程序集或执行其他操作?

更新

我还尝试在 Ubuntu 13.04 上的 Mono 上使用开源编译器fsharpc(F# 3.0)。结果与 相同fsc

4

2 回答 2

3

--mlcompatibility选项仅关闭警告,因此这看起来像是回归。mlcompatibility您可以通过在https://github.com/fsharp/fsharp/search?q=mlCompatibility&type=Code中搜索所有引用的来源来验证这一点。

于 2013-10-28T05:10:43.680 回答
2

调用fsc(fsharpc在非 Windows 系统上) 时,编译器选项位于源文件名之前。所以调用它的正确方法是:

fsc -o:MyProgram.exe --mlcompatibility Program.fs

使用 Visual Studio 编译时,您可以进入项目的属性并添加--mlcompatibilityOther flags框中:

演示如何将“mlcompatibility”标志添加到 F# 项目

于 2013-10-28T01:21:44.550 回答