我有一个接口,它接受一个通用参数并有一个抽象方法
type MyInterface<'a> =
abstract member abstractMethod: 'a -> 'a
...我有一个派生类,它继承自基类,使用 unit 作为类型参数
type Derived() =
interface MyInterface<unit> with
override this.abstractMethod (_) = ()
但是编译器抱怨
错误成员'abstractMethod:unit - &gt;单位'没有 更正类型以覆盖相应的抽象方法。
如果我使用其他类型而不是单位,例如 int ,则代码会编译。
这是编译器中的错误吗?它有解决方法吗?
谢谢!
答案 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#)