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#签名文件错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 F# 签名文件 (.fsi) 中使用文字属性

f#:导致 Intellisense 抱怨的签名文件?

重命名项目会导致 med 代码签名错误

双重签名 .cat 文件有错误“主题中不存在签名”

macOS App 使用 App Store 的配置文件手动签名得到错误代码签名无效

代码签名错误:未找到匹配的配置文件:未找到与适用的签名身份匹配的配置文件