10

deriving ShowHaskell では、型定義に追加するだけで、代数型/判別共用体を文字列として「表示可能」にするのは簡単です。

F# では、次のようなものを書くことになります。

type Pos = 
    | Pos of int * int
    override this.ToString() = 
        match this with
        Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp

そして明らかに、より複雑な型ではさらに悪化します。

deriving ShowF#のようなものを取得する方法はありますか?

4

1 に答える 1

20

などの F# 印刷関数は、書式指定子printfを使用すると、任意のデータ型を合理的に書式設定できます (指定した場合に使用されます)。フォーマットされた文字列を返す whichを使用して実装できます。%AToString%OToStringsprintf

type Pos =  
    | Pos of int * int 
    override x.ToString() = sprintf "%A" x 

これは、たとえば "Pos (1, 2)" を出力し、ほとんどの F# 型 (リスト、ユニオン、レコード、タプル) で機能します。追加するよりも少し長くなりderiving Showますが、少なくとも印刷を自分で実装する必要はありません。

于 2010-02-19T11:37:02.533 に答える