我收到这样的编译器错误:

我将其范围缩小到我的异常的记录类型包含函数类型的字段这一事实。
在我的真实代码中,我可以解决此问题,因为在异常(exception)情况下我不需要此功能,但我仍然很好奇,为什么只有当我拥有签名文件时,为什么我会收到此错误,我将如何处理?异常实现IStructuralEquatable吗?
这是我的签名文件Test.fsi:

module Test
type exception_type
exception TestException of exception_type
val throw_test_exception: unit -> unit
这是我的实现文件Test.fs:
module Test
type exception_type = { value: unit -> unit }
exception TestException of exception_type
let throw_test_exception (): unit =
    let r = { value = (fun () -> ()) }
    raise (TestException r)
当没有签名文件时,一切都可以编译。

最佳答案

为了使签名正常工作,您需要在签名中定义exception_type的完整类型:
测试文件

module Test
type exception_type = { value: unit -> unit }
...
然后错误将消失。
签名文件为typically not created by hand.。您可以创建它们using the --sig option
我不确定为什么要在异常中传递函数。这对我来说没有意义,但是如果您详细说明您的案子(另一个问题),也许我可以提供一些建议。

关于exception - F#: how to satisfy IStructuralEquatable requirement when implementing an exception with a signature file?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64812041/

10-09 18:42