[英]Haskell's “deriving Show” in F#?
在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
显然,对于更复杂的类型,它会变得更糟。
有什么办法可以在F#中deriving Show
?
如果使用%A
格式说明符,则f#打印函数(如printf
可以合理地格式化任何数据类型(如果指定%O
则它们使用ToString
)。 您可以使用sprintf
实现ToString
,它返回格式化的字符串:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
这打印例如“Pos(1,2)”,它适用于大多数F#类型(列表,联合,记录,元组)。 它比仅添加deriving Show
长一些,但至少你不必自己实现打印。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.