【问题标题】:Printing F# discriminated union打印 F# 可区分联合
【发布时间】:2011-11-19 02:33:05
【问题描述】:

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

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

如何使值以fsi 的方式打印?

【问题讨论】:

标签: f# mono tostring discriminated-union


【解决方案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)

【讨论】:

【解决方案2】:

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

如果你想要Enum.GetName,你可以使用Microsoft.FSharp.Reflection命名空间。见What is the Enum.GetName equivalent for F# union member?

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2012-12-14
      • 2013-08-04
      相关资源
      最近更新 更多