有没有人知道为什么不sub
抛出异常add
?这是一个错误吗?
open Microsoft.FSharp.Linq.QuotationEvaluation
let inline add x = x + x
let inline sub x = x - x
let answer = <@ add 1 @>.Eval() // 2, as expected
let answer2 = <@ sub 1 @>.Eval() // NotSupportedException
Run Code Online (Sandbox Code Playgroud)
注意,如果没有inline关键字,则不会抛出异常(但代码不是通用的)此外,仅在使用引用时抛出异常.正常评估工作正常.
谢谢
编辑:简化代码示例
我正在尝试编写一个可以表示函数应用程序的类型化抽象语法树数据类型.
到目前为止我有
type Expr<'a> =
| Constant of 'a
| Application of Expr<'b -> 'a> * Expr<'b> // error: The type parameter 'b' is not defined
Run Code Online (Sandbox Code Playgroud)
我不认为F#中有一种方法可以在最后一行写出"for all b"之类的东西 - 我是否错误地接近了这个问题?