我正在编写一个F#程序,它将字符串解析为AST类型,这是一个有区别的联合。
当我使用fsi
(在Mono + Mac OS X上)运行我的代码时,AST会以漂亮的格式打印出来。但是当我使用printfn "%s" <| ast.ToString()
时,我会得到类似FSI_0002.Absyn+clazz
的内容。为所有受歧视的联合类型编写ToString
方法将是一项繁重的工作。
如何按照fsi
的方式打印值?
答案 0 :(得分:9)
你试过printfn "%A" ast
吗? %A
说明符会考虑StructuredFormatDisplayAttribute
[MSDN](如果存在)。
答案 1 :(得分:1)
要将有区别的联合转换为字符串,您应该使用sprintf "%A" ast
而不是ast.ToString()。
如果您需要Enum.GetName,可以使用Microsoft.FSharp.Reflection
命名空间。请参阅What is the Enum.GetName equivalent for F# union member?。
答案 2 :(得分:0)
除了丹尼尔的评论之外,这里有一篇很好的博客文章,解释了如何以任何你想要的方式格式化它: