F#签名文件错误
Posted
技术标签:
【中文标题】F#签名文件错误【英文标题】:F# signature file error 【发布时间】:2009-12-08 11:01:10 【问题描述】:我试图使用 fsi 文件来允许在单独的文件中相互递归类,但我的 fsi 文件没有编译。下面是一个演示问题的简单示例。
文件program.fs:
module mod1
type first =
|zero = 0
文件 File1.fs:
module mod2
type second =
|zero2 = 0
使用--sig:signature.fsi
编译产生:
#light
module mod1
type first =
| zero = 0
module mod2
type second =
| zero2 = 0
哪个有错误就行了
type second
这是
Error 1 Unexpected keyword 'type' in signature file. Expected ':', '=' or other token.
【问题讨论】:
有没有什么办法可以解决这个问题,而无需将两个文件合并为一个,正如我在这里所质疑的那样? ***.com/questions/31086071/… 【参考方案1】:您可能认为这就是签名文件的用途(如 C++ 头文件),但事实并非如此。至少,我一开始是这么想的。
在 F# 中定义相互递归类型的唯一方法是将它们放在同一个源文件中并使用 and
关键字:
module mod1_mod2
type first =
| zero = 0
and second =
| zero2 = 0
【讨论】:
那么为什么编译器会发出一个无法编译的 fsi 文件呢? .fsi 文件的主要目的是定义模块公开的签名(类型和函数);这是从 OCaml 继承的概念。从 .NET 互操作的角度来看,直接在源代码中将类型和函数标记为 public/private 更加灵活。 啊,误读了你的问题。我不确定为什么编译器会发出一个包含两个模块的 .fsi 文件。以上是关于F#签名文件错误的主要内容,如果未能解决你的问题,请参考以下文章