内容简介:这在F#语言中看起来像是一个讨厌的角色,但我不知道它是否符合编译器的设计限制或错误.如果是设计限制,则错误消息应该说(因为目前来说,这并不太有意义).无论如何,问题是F#编译器不会在IL中生成实际包含单元类型的代码.它用void(当用作返回类型)或空参数列表(用作方法或函数参数)时替换它).这意味着在MyClass类型中,编译器决定将MyFun成员编译成一个接受字符串并返回void(但不能使用void作为通用类型参数的方法)的方法,因此这不起作用).原则上,在这种情况下,编译器可以使用实际的单元类型(因为
type MyInterface<'input, 'output> = abstract member MyFun: 'input -> 'output type MyClass() = interface MyInterface<string, unit> with member this.MyFun(input: string) = () //fails with error FS0017: The member 'MyFun : string -> unit' does not have the correct type to override the corresponding abstract method. type MyUnit = MyUnit type MyClass2() = //success interface MyInterface<string, MyUnit> with member this.MyFun(input: string) = MyUnit
这在F#语言中看起来像是一个讨厌的角色,但我不知道它是否符合编译器的设计限制或错误.如果是设计限制,则错误消息应该说(因为目前来说,这并不太有意义).
无论如何,问题是F#编译器不会在IL中生成实际包含单元类型的代码.它用void(当用作返回类型)或空参数列表(用作方法或函数参数)时替换它).
这意味着在MyClass类型中,编译器决定将MyFun成员编译成一个接受字符串并返回void(但不能使用void作为通用类型参数的方法)的方法,因此这不起作用).原则上,在这种情况下,编译器可以使用实际的单元类型(因为这是唯一的方式来使其运行),但是这可能会在别的地方产生其他不一致.
创建MyUnit的诀窍是,我认为,解决问题是一个很好的方法.即使核心的F#库在实现的某些地方(在异步工作流程中)使用类似MyUnit的东西来处理单元的一些限制(以及它被编译的方式).
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/4485445/f-interface-inheritance-failure-due-to-unit
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 028.Python面向对象继承(单继承,多继承,super,菱形继承)
- PHP类继承、接口继承关系概述
- 故障公告:Linux 内核故障导致网站宕机近 1 个小时
- 面向对象:理解 Python 类的单继承与多继承
- java入门第二季--继承--java中的继承初始化顺序
- 前端基本功(七):javascript中的继承(原型、原型链、继承的实现方式)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms Unlocked
Thomas H. Cormen / The MIT Press / 2013-3-1 / USD 25.00
Have you ever wondered how your GPS can find the fastest way to your destination, selecting one route from seemingly countless possibilities in mere seconds? How your credit card account number is pro......一起来看看 《Algorithms Unlocked》 这本书的介绍吧!