2010-06-18 76 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