印刷F#区别联盟

时间:2011-09-17 02:36:19

标签: f# mono tostring discriminated-union

我正在编写一个F#程序,它将字符串解析为AST类型,这是一个有区别的联合。

当我使用fsi(在Mono + Mac OS X上)运行我的代码时,AST会以漂亮的格式打印出来。但是当我使用printfn "%s" <| ast.ToString()时,我会得到类似FSI_0002.Absyn+clazz的内容。为所有受歧视的联合类型编写ToString方法将是一项繁重的工作。

如何按照fsi的方式打印值?

3 个答案:

答案 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)

除了丹尼尔的评论之外,这里有一篇很好的博客文章,解释了如何以任何你想要的方式格式化它:

http://blogs.msdn.com/b/dsyme/archive/2010/01/08/some-tips-and-tricks-for-formatting-data-in-f-interactive-and-a-in-sprintf-printf-fprintf.aspx

相关问题