[<ReflectedDefinition>]
let rec x = (fun() -> x + "abc") ()
具有上述递归值的示例代码会产生以下 F# 编译器错误:
错误 FS0432:[<ReflectedDefinition>] 术语不能包含前缀拼接运算符“%”的使用
我在上面的代码中看不到任何切片运算符的用法,看起来像一个错误...... :)
看起来这是ReflectedDefinitionAttribute
仅通过报价的问题,正常报价效果很好:
let quotation =
<@ let rec x = (fun() -> x + "abc") () in x @>
Lazy.create
使用隐藏和Lazy.force
用法产生预期结果:
val quotation : Quotations.Expr<string> =
LetRecursive
([(x, Lambda (unitVar,
Application
(Lambda (unitVar0,
Call (None,
String op_Addition[String,String,String](String, String),
[Call (None,
String Force[String](Lazy`1[System.String]), // `
[x]), Value ("abc")])),
Value (<null>)))),
(x, Call (None, Lazy`1[String] Create[String](FSharpFunc`2[Unit,String]), [x])),
(x, Call (None, String Force[String](Lazy`1[String]), [x]))], x) // `
所以问题是:这是否是 F# 编译器错误?