inheritance - F# 4.0 继承引发 FS0073 内部错误 : the mustinline value 'Foo' was not inferred to have a known value

标签 inheritance compiler-errors f# inline f#-4.0

我意识到 this was asked before但我敢冒被关闭的风险,因为原来的问题已经三年了,而我们现在又是两个主要的 F# 版本。

更新:我有 reported this as a bug to the F# team ,但我仍然很好奇是否存在解决方法。

遵循 F# 的经典 OO 范例,我尝试通过基类继承共享成员,但在内联方法上立即出现以下错误(在这种特殊情况下,确实需要内联)。

Error FS0073: Internal error: The mustinline value 'SomethingElse' was not inferred to have a known value
Error FS1113: The value 'SomethingElse' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible

使用 F# 4.0 在 Visual Studio 2015 中引发此错误的最小化示例:

type A() =
    static member inline dosomething() = ()

type B() =
    inherit A()
    member inline this.SomethingElse a = a + 10

我很好奇。第一个错误似乎表明类型推断失败。但是,添加特定类型的装饰似乎没有帮助。

错误二表明存在一些被认为不可访问的隐藏成员。我找不到一个。添加一个显式公共(public)成员来愚弄编译器也无济于事。

到目前为止我的结论是:类中有任何内联实例成员(它不会发生在静态成员上)似乎会导致编译错误。也许这类似于不允许内联接口(interface)成员,这是可以理解的,但那样的话,非继承成员仍然可以被标记为内联。

在过去三年中有什么想法和/或变通办法吗?

最佳答案

这个问题的正确答案是:这是一个错误。

作为report shows ,此问题已得到确认并同时得到修复,并将成为 F# 下一次更新的一部分。

该问题的修复日期(合并到 master 分支的日期是 2016 年 2 月)表明它属于 Update 3(但我看不到它在那里工作)或即将到来的 F# 4.1。

关于inheritance - F# 4.0 继承引发 FS0073 内部错误 : the mustinline value 'Foo' was not inferred to have a known value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914512/

相关文章:

java - 我应该仅仅因为添加了一个变量就扩展一个类吗?

java - 字符串文字没有被双引号正确关闭

f# - 为什么 max(Operator) 不返回最长列表?

c# - 具有多个基本构造函数和事件的 F# 继承

f# - 具有多个可选参数的方法的包装器

在子类中未检测到 C++ 纯虚函数

javascript - Object.create 将prototype.constructor 更改为父构造函数,但在子实例化时,子构造函数运行

C++ 如何返回未知的派生类?

java - 为什么我会收到 <identifier> 预期错误?

c++ - 编译错误 C++ : could not deduce template argument for 'T'