我正在编写一个 F# 程序,它将一个字符串解析为一个 AST 类型,它是一个有区别的联合。
当我使用fsi
(在 Mono + Mac OS X 上)运行我的代码时,AST 以很好的格式打印出来。但是当我使用时,printfn "%s" <| ast.ToString()
我会得到类似FSI_0002.Absyn+clazz
. 为所有可区分的联合类型编写ToString
方法将是一件大事。
如何以这种方式打印值fsi
?
我正在编写一个 F# 程序,它将一个字符串解析为一个 AST 类型,它是一个有区别的联合。
当我使用fsi
(在 Mono + Mac OS X 上)运行我的代码时,AST 以很好的格式打印出来。但是当我使用时,printfn "%s" <| ast.ToString()
我会得到类似FSI_0002.Absyn+clazz
. 为所有可区分的联合类型编写ToString
方法将是一件大事。
如何以这种方式打印值fsi
?
你试过printfn "%A" ast
吗?说明%A
符会考虑StructuredFormatDisplayAttribute
[MSDN](如果存在)。
要将可区分联合转换为字符串,应使用sprintf "%A" ast
ast.ToString() 来代替。
如果你想要Enum.GetName,你可以使用Microsoft.FSharp.Reflection
命名空间。请参阅F# 联合成员的 Enum.GetName 等效项是什么?.
除了 Daniel 的评论之外,这里有一篇很好的博客文章,解释了如何以您希望的任何方式对其进行格式化:
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 (web.archive.org)