9

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

当我使用fsi(在 Mono + Mac OS X 上)运行我的代码时,AST 以很好的格式打印出来。但是当我使用时,printfn "%s" <| ast.ToString()我会得到类似FSI_0002.Absyn+clazz. 为所有可区分的联合类型编写ToString方法将是一件大事。

如何以这种方式打印值fsi

4

3 回答 3

10

你试过printfn "%A" ast吗?说明%A符会考虑StructuredFormatDisplayAttribute[MSDN](如果存在)。

于 2011-09-17T02:39:12.940 回答
2

要将可区分联合转换为字符串,应使用sprintf "%A" astast.ToString() 来代替。

如果你想要Enum.GetName,你可以使用Microsoft.FSharp.Reflection命名空间。请参阅F# 联合成员的 Enum.GetName 等效项是什么?.

于 2015-04-11T02:56:27.563 回答
1

除了 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)

于 2011-09-17T05:17:57.280 回答