2010-06-18 122 views
20

想象一下下面的接口在C#中的接口成员:如何实现返回void在F#

interface IFoo { 
    void Bar(); 
} 

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

这是我到目前为止有:

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

与_FS0010失败:在表情的

意外的关键字 '无效'。

回答

22

相当于语法上定义为()的单位。

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

感谢。我很享受学习F#! – 2010-06-18 07:12:47

+0

@德鲁 - 这是一种很棒的语言。 – ChaosPandion 2010-06-18 13:30:47

+0

C#代码是一种方法,而不是属性。为了在F#中重现这一点,我相信你需要一个具有签名单元 - >单元的成员。这将写成“member this.Bar()=()”。没有单位参数,F#可能是一个带有getter的属性。 – Jason 2010-06-18 17:18:08

6

的返回类型必须是(),所以像成员this.Bar =()应该做的伎俩

+7

为了迂回,return _type_是'unit',该类型的唯一_value_拼写为'()'。 – Brian 2010-06-18 08:58:17

7

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

The basic syntax of F# - types

在这个页面:

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

+0

感谢您的链接。我在你的回答中包含了该页面的引用。 – 2010-06-18 10:05:03

3

在F#的等效是:

type IFoo = 
    abstract member Bar: unit -> unit