在Haskell中,很容易通过简单地添加到deriving Show类型定义,使代数类型/识别联合“显示”作为字符串。

在F#我最终写之类的东西:

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

和显然它变得更糟糕更复杂的类型。

任何方式来获得类似deriving Show在F#?

有帮助吗?

解决方案

F#打印功能,诸如printf能够如果使用%A格式说明合理格式化任何数据类型(它们使用ToString如果指定%O)。您可以使用ToString返回格式化字符串实现sprintf

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

此打印例如“位置(1,2)”,它适用于大多数的F#类型(列表,工会,记录,元组)的。这是一个有点长于只是增加deriving Show但至少你不必执行打印自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top