如何实现在F#中返回void的接口成员

时间:2010-06-18 06:25:34

标签: interface compiler-errors f# void unit-type

想象一下C#中的以下界面:

interface IFoo {
    void Bar();
}

如何在F#中实现此功能?我在网上搜索30分钟时发现的所有示例都只显示了返回类型的示例,我认为这些示例在函数式中更常见,但在这种情况下我无法避免。

这是我到目前为止所拥有的:

type Bar() =
    interface IFoo with
        member this.Bar() =
            void

_FS0010失败:

  

表达式_中的意外关键字'void'。

4 个答案:

答案 0 :(得分:22)

等效单位,在语法上定义为()

type Bar() =
    interface IFoo with
        member this.Bar () = ()

答案 1 :(得分:7)

有关F#类型的一般信息,请参阅

The basic syntax of F# - types

从该页面开始:

  

单位类型只有一个值,写成“()”。它有点像“void”,在某种意义上说,如果你有一个只调用副作用的函数(例如printf),这样的函数将具有返回类型“unit”。每个函数都接受一个参数并返回一个结果,因此你使用“unit”来表示参数/结果是无趣/无意义的。

答案 2 :(得分:6)

返回类型需要是(),所以像成员this.Bar =()这样的东西应该可以做到这一点

答案 3 :(得分:3)

F#中的等价物是:

type IFoo =
    abstract member Bar: unit -> unit