F#引用和代码注释表达式
事实证明,用谷歌搜索“评论”这个词真的很难 是否可以在抽象语法树中表示“注释”表达式F#引用和代码注释表达式,f#,metaprogramming,F#,Metaprogramming,事实证明,用谷歌搜索“评论”这个词真的很难 是否可以在抽象语法树中表示“注释”表达式 <@ //this gets ignored by the compiler and don't inject the quotation @> 引用返回的类型不包含任何表示注释的方式,因此这是不可能的。引用返回的类型不包含任何表示注释的方式,因此这是不可能的。正如Ganesh指出的,Expr类型无法表示注释-F#引号实际上只表示表达式的AST,而不是源代码的完整信息(尽管您可以获取引用表达式的文
<@ //this gets ignored by the compiler and don't inject the quotation
@>
引用返回的类型不包含任何表示注释的方式,因此这是不可能的。引用返回的类型不包含任何表示注释的方式,因此这是不可能的。正如Ganesh指出的,Expr
类型无法表示注释-F#引号实际上只表示表达式的AST,而不是源代码的完整信息(尽管您可以获取引用表达式的文件名和位置)
为了以某种方式将注释嵌入到引号中,您需要想出一种方法将注释嵌入为有效的F#代码,这意味着什么-因此,您可以定义一个伪函数comment
,并执行如下操作:
let comment (s:string) = ()
let sample =
<@ comment "this is not ignored"
1 + ( comment "this is also not ignored"
4 ) @>
这不是一个很好的方法,但是如果你想在手写的引号代码中嵌入一些注释,我想这是最好的方法。正如Ganesh指出的那样,Expr
类型无法表示注释-F#引号实际上只表示表达式的AST,而不是关于源代码的完整信息(尽管您可以获得文件名&引用表达式的位置)
为了以某种方式将注释嵌入到引号中,您需要想出一种方法将注释嵌入为有效的F#代码,这意味着什么-因此,您可以定义一个伪函数comment
,并执行如下操作:
let comment (s:string) = ()
let sample =
<@ comment "this is not ignored"
1 + ( comment "this is also not ignored"
4 ) @>
这不是一个很好的方法,但是我想如果你想在手工编写的引用代码中嵌入一些注释的话,这是最好的方法
match sample with
| Comment(comment, body) ->
printfn "// %s\n%A" comment body