打印 F# 歧视联合

发布于 2024-12-05 05:00:11 字数 297 浏览 1 评论 0原文

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

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

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

I am writing a F# program which parses a string into a AST type which is a discriminated union.

When I use fsi (on Mono + Mac OS X) to run my code, the AST is printed out in a nice format. But when I use printfn "%s" <| ast.ToString() I get something like FSI_0002.Absyn+clazz. Writing a ToString method for all the discriminated union types would be a big chore.

How do I make the value print the way fsi does it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不气馁 2024-12-12 05:00:11

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

Have you tried printfn "%A" ast? The %A specifier takes into consideration the StructuredFormatDisplayAttribute[MSDN], if present.

梦断已成空 2024-12-12 05:00:11

要将可区分联合转换为字符串,您应该使用 sprintf "%A" ast 而不是 ast.ToString()。

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

To convert a discriminated union into a string, you should use sprintf "%A" ast instead of ast.ToString().

If you want Enum.GetName, you can use Microsoft.FSharp.Reflection namespace. See What is the Enum.GetName equivalent for F# union member?.

狼亦尘 2024-12-12 05:00:11

除了丹尼尔的评论之外,这里还有一篇很好的博客文章,解释了如何以您希望的方式对其进行格式化:

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)

In addition to Daniel's comment, here is a good blog article explaining how to format it in whatever way you'd wish:

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文