2010-06-18 5 views
20

Stellen Sie sich die folgende Schnittstelle in C# zurückgibt:Wie eine Schnittstelle Mitglied implementieren, die Lücke in F #

interface IFoo { 
    void Bar(); 
} 

Wie kann ich dies in F # implementieren? Alle Beispiele, die ich während einer 30-minütigen Online-Suche gefunden habe, zeigen nur Beispiele mit Rückgabetypen, die in einem funktionalen Stil häufiger vorkommen, aber etwas, das ich in diesem Fall nicht vermeiden kann.

Hier ist, was ich bisher:

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

schlägt mit _FS0010:

Unexpected Schlüsselwort 'Leere' in EXPRESSION_.

Antwort

22

Das Äquivalent ist eine Einheit, die syntaktisch als () definiert ist.

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

Dank. Ich genieße es, F # zu lernen! –

+0

@Drew - Es ist eine tolle Sprache. – ChaosPandion

+0

Der C# -Code war eine Methode, keine Eigenschaft. Um dies in F # zu reproduzieren, glaube ich, dass Sie ein Mitglied mit Signatureinheit -> Einheit brauchen. Dies würde "member this.Bar() =()" geschrieben werden. Ohne den Einheitenparameter wäre F # könnte eine Eigenschaft mit einem Getter sein. – Jason

6

Der Rückgabetyp muss() sein, so etwas wie Mitglied this.Bar =()

+7

Um pedantisch zu sein, ist die Rückkehr _type _ 'Einheit', der einzige _value_ dieses Typs wird' '' 'geschrieben. – Brian

7

Für allgemeine Informationen über F # -Typen den Trick tun sollte, sehen

The basic syntax of F# - types

Von dieser Seite:

Die Einheit Typ hat nur einen Wert, geschrieben "()". Es ist ein bisschen wie "void", in dem Sinne, dass, wenn Sie eine Funktion haben, die Sie nur für Nebenwirkungen (z. B. printf) aufrufen, eine solche Funktion einen Rückgabetyp von "Einheit" haben wird. Jede Funktion nimmt ein Argument und gibt ein Ergebnis zurück, so dass Sie mit "Einheit" angeben, dass das Argument/Ergebnis uninteressant/bedeutungslos ist.

+0

Danke für den Link. Ich habe ein Zitat von der Seite in Ihre Antwort eingefügt. –

3

Das Äquivalent in F # ist:

type IFoo = 
    abstract member Bar: unit -> unit