20

想象一下 C# 中的以下接口:

interface IFoo {
    void Bar();
}

如何在 F# 中实现这一点?我在 30 分钟的在线搜索中找到的所有示例仅显示具有返回类型的示例,我认为这些示例在函数式样式中更为常见,但在这种情况下我无法避免。

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

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

_FS0010 失败:

expression_ 中出现意外的关键字“void”。

4

4 回答 4

22

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

type Bar() =
    interface IFoo with
        member this.Bar () = ()
于 2010-06-18T06:27:43.830 回答
7

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

F#的基本语法——类型

从该页面:

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

于 2010-06-18T09:00:57.090 回答
6

返回类型必须是 (),所以像member this.Bar = ()这样的东西应该可以解决问题

于 2010-06-18T06:30:46.253 回答
3

F# 中的等价物是:

type IFoo =
    abstract member Bar: unit -> unit
于 2016-04-12T15:46:39.340 回答