在一行中编写F#对象表达式

Fre*_*any 6 syntax f#

当我准备为F#编写代码生成器时,我想知道是否可以通过仅生成一行值来避免进入缩进混乱.

作为这项工作的一部分,我正在考虑如何在一行中表达对象表达式,但除了在详细模式中之外无法成功.

let Expr() = (let ToString = "ToString" in { new System.Object() with member this.ToString() = ToString; member this.GetHashCode() = ToString.GetHashCode()})
Run Code Online (Sandbox Code Playgroud)

问题是我不想在详细模式下生成我的所有代码,这是兼容性功能.还有其他选择吗?

非常感谢你的见解!
弗朗索瓦


我要求这个的原因是我必须在任意表达式中生成对象表达式,我想避免计算当前行中的字符数来计算我要缩进下一行的数量.

pad*_*pad 3

(无耻的插件)我维护F# 源代码格式化程序,它将API公开为漂亮的完整 F# 3.0 语法。您有多种选择:

  • 使用详细模式实现代码生成器,并在输出上运行源代码格式化程序 API。然后您不必担心缩进,并且在详细模式下换行非常容易。

  • 使用函数组合器实现代码生成器。FormatConfig 模块中有很多组合器,您可以复制和修改它们。F#缩进规则清晰;您可以在这篇文章中阅读更多内容。

  • 您可能有一个用于漂亮打印的 AST。如果您更喜欢轻量级解决方案,F# Compiler CodeDom 具有类似的代码生成组合器。