我正在使用DLR在C#中实现一个语言解释器,而我在使用三元运算符时遇到了一些麻烦。此时,我已经实现了基本的函数声明/调用,如下所示:
F := (x) -> x + 1
F(1) # returns 2
我没有遇到函数体是一系列表达式的问题 - 总是返回最后一个表达式的值,并且我确保解释器中的所有情况至少返回 < / em>作为副作用。我现在正在尝试实现三元运算符(?:)。我正在渲染的表达式树看起来像这样:
work = Expression.IfThenElse(
Expression.IsTrue(Expression.Convert(work, typeof(Boolean))),
trueExp,
falseExp);
其中trueExp和falseExp都是有效的表达式。
问题似乎是IfThenElse表达式没有返回值,所以基本上即使trueExp和falseExp构建表达式树,IfThenElse表达式的最终结果也始终为null。如果没有制作运行时功能并明确调用它,有没有办法使用DLR实现三元运算符? (即:表达式。执行IfThenElse并返回true和false子句中的实际值?)
我希望解析的内容如下:
F := (x) -> (x = 1) ? 4 : 5
F(1) #4
F(2) #5
但是现在由于上面列出的问题,这在编译成程序时总是返回null。
我很感激任何帮助,这非常令人烦恼!
答案 0 :(得分:17)
Expression.IfThenElse
是if (...) ... else ...;
构造,而不是三元运算符。
三元运算符为Expression.Condition