将“unit”作为类型参数传递给F#中的泛型类

时间:2017-12-20 15:55:25

标签: f#

我有一个接口,它接受一个通用参数并有一个抽象方法

type MyInterface<'a> =
    abstract member abstractMethod: 'a -> 'a

...我有一个派生类,它继承自基类,使用 unit 作为类型参数

type Derived() =
    interface MyInterface<unit> with
        override this.abstractMethod (_) = ()

但是编译器抱怨

  

错误成员'abstractMethod:unit - &gt;单位'没有   更正类型以覆盖相应的抽象方法。

如果我使用其他类型而不是单位,例如 int ,则代码会编译。

这是编译器中的错误吗?它有解决方法吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

function define(...) { /* function to define a module */ } function require(moduleName) { /* function to import a module */ } // block with my refactored out module definitions define('module1', function () { // extracted modularised code goes here }); define('module2', function () { // extracted modularised code goes here }); // further down goes legacy code, which can import new modules var myModule = require('myNewModule'); function myGlobalLegacyFunction() { // use myModule } 是&#34;特殊&#34;就interop而言:当一个函数以unit作为参数时,它被编译为IL作为无参数函数,当函数返回unit作为结果时,它被编译为{{1功能。由于这种诡计,你无法真正使用unit作为&#34;通用&#34;输入互操作设置(例如类和接口)。

事实上,当我尝试在我的机器上编译代码时,我得到了一个不同的错误:

void

我试图大致说出我上面描述的内容。

(我不确定为什么你会得到你正在获得的东西;或许你正在使用旧版本的F#)