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