20

C# で次のインターフェイスを想像してください。

interface IFoo {
    void Bar();
}

これを F# で実装するにはどうすればよいですか? 30分間のオンライン検索で見つけたすべての例は、関数型スタイルでより一般的であると思われる戻り値の型を持つ例のみを示していますが、この例では避けられないものです.

これが私がこれまでに持っているものです:

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

_FS0010 で失敗:

expression_ に予期しないキーワード 'void' があります。

4

4 に答える 4

22

同等のものは、構文的に として定義される unit()です。

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

F#タイプの一般的な情報については、を参照してください。

F#の基本構文-タイプ

そのページから:

ユニットタイプには、「()」と書かれた値が1つだけあります。副作用(printfなど)のみを呼び出す関数がある場合、そのような関数の戻り値は「unit」であるという意味で、これは「void」に少し似ています。すべての関数は引数を取り、結果を返すため、「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 に答える