我正在为 F# 中的 linq 表达式生成器编写简单的 excel 公式。我正在将公式解析为 AST 并使用递归表达式构建器构建表达式。我一直坚持将环境((字符串,表达式)对的映射)传递给该调用中生成的表达式:
Expression.Lambda<System.Func<double>>(eval pexpr).Compile()
其中 pexpr 被解析为 AST 而 eval 是表达式生成器函数。
问题在于定义应该如下所示的类型:
type ExprFunc = Func<ExprFunc map, double>
Expression.Lambda<ExprFunc>(eval pexpr).Compile()
如果 pexpr 包含对 Var("name") 形式的其他表达式的引用,我想注入在环境映射中搜索具有“name”的函数的表达式并调用它,在该调用中传递相同的环境映射。
不幸的是,编译器说不:
此类型定义涉及通过缩写的直接循环引用
有没有办法在.net中定义这种函数类型?