内容简介:这在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中的继承(原型、原型链、继承的实现方式)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ordering Disorder
Khoi Vinh / New Riders Press / 2010-12-03 / USD 29.99
The grid has long been an invaluable tool for creating order out of chaos for designers of all kinds—from city planners to architects to typesetters and graphic artists. In recent years, web designers......一起来看看 《Ordering Disorder》 这本书的介绍吧!