F# Deedle数据框中的漂亮打印

F# Deedle数据框中的漂亮打印,f#,f#-interactive,deedle,F#,F# Interactive,Deedle,我想知道是否有一种简单的方法可以将漂亮的打印添加到Deedle数据框中使用的自定义类型中 在以下示例中: open Deedle type PrimaryContactInfo = | Default of int | NonDefault of int | Missing type Account = { PrimaryContact : PrimaryContactInfo } [ { PrimaryContact = Default(1) }; { Prima

我想知道是否有一种简单的方法可以将漂亮的打印添加到Deedle数据框中使用的自定义类型中

在以下示例中:

open Deedle

type PrimaryContactInfo =
    | Default of int
    | NonDefault of int
    | Missing

type Account = { PrimaryContact : PrimaryContactInfo }

[ { PrimaryContact = Default(1) }; { PrimaryContact = Default(2) }; { PrimaryContact = NonDefault(5) } ]
|> Frame.ofRecords
我在fsi中获得以下输出:

     PrimaryContact                         
0 -> FSI_0011+PrimaryContactInfo+Default    
1 -> FSI_0011+PrimaryContactInfo+Default    
2 -> FSI_0011+PrimaryContactInfo+NonDefault 
但我更希望有这样的输出:

     PrimaryContact                         
0 -> Default(1)    
1 -> Default(2)   
2 -> NonDefault(5)
这是可能的吗?

正如所暗示的,F#区分的并集不会自动很好地转换为字符串

您可以通过重写
ToString
,使其很好地转换:

type PrimaryContactInfo =
    | Default of int
    | NonDefault of int
    | Missing
    override this.ToString () = sprintf "%A" this
但是,请注意,
“%A”
的使用可能会,因此,如果需要,请测量并编写一个更快、更明确的实现;例如:

type PrimaryContactInfo =
    | Default of int
    | NonDefault of int
    | Missing
    override this.ToString () =
        match this with
        | Default i -> sprintf "Default %i" i
        | NonDefault i -> sprintf "NonDefault %i" i
        | Missing -> "Missing"
这会产生与sprintf“%A”完全相同的输出,但不使用反射,因此理论上应该更快一些(但不要相信我的话:测量)。

可能的重复:另请参见