Mir*_*anu 10 .net f# haskell discriminated-union object-to-string
在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
Run Code Online (Sandbox Code Playgroud)
显然,对于更复杂的类型,它会变得更糟.
有什么办法得到像deriving ShowF#的东西?
Tom*_*cek 20
printf如果使用%A格式说明符(ToString如果指定则使用它们%O),F#打印功能可以合理地格式化任何数据类型.你可以实现ToStringusing sprintf返回格式化的字符串:
type Pos =
| Pos of int * int
override x.ToString() = sprintf "%A" x
Run Code Online (Sandbox Code Playgroud)
这打印例如"Pos(1,2)",它适用于大多数F#类型(列表,联合,记录,元组).这比仅仅添加deriving Show要长一些,但至少你不必自己实现打印.