[英]F# quotation evaluation issue
我遇到了F#powerpack报价评估的问题。
open Microsoft.FSharp.Linq.QuotationEvaluation
let print x = System.Console.WriteLine(sprintf "%A" x)
type record = { x:int; y:int }
let val1 = { x = 1; y = 1; }
let val2 = { x = 1; y = 1; }
let result = val1 = val2
print result
let quote = <@ let value1 = { x = 1; y = 1; }
let value2 = { x = 1; y = 1; }
let result2 = value1 = value2
result2 @>
print (quote.EvalUntyped())
第一个结果如你所料那样真实。 第二个是假的。 这是一个错误,还是我错过了什么?
对我来说这看起来像个错误。 来自F#团队的人可能会给出一个明确的答案:-)。 与此同时,这里有一个简单的解决方法,您可以使用 - 问题似乎与=
运算符的编译有关。 您可以定义自己的运算符(或函数),并从引用的代码中调用此运算符:
let (><) a b = a = b
let quote =
<@ let value1 = { x = 1; y = 1; }
let value2 = { x = 1; y = 1; }
let result2 = value1 >< value2
result2 @>
print (quote.EvalUntyped())
这将生成调用自定义运算符的代码(然后将其作为标准的,正确编译的F#代码运行),而不是生成对standard =
运算符的错误调用,因此这给出了预期的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.