繁体   English   中英

Haskell在F#中的“派生表演”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM