在F#Haskell的“派生秀”?
-
21-09-2019 - |
题
在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
但至少你不必执行打印自己。
不隶属于 StackOverflow