首页 文章

如何在DLR中实现三元运算符

提问于
浏览
5

我正在使用DLR在C#中实现一个语言解释器,我在使用三元运算符时遇到了一些麻烦 . 此时,我已经实现了基本的函数声明/调用,如下所示:

F := (x) -> x + 1
F(1)   # returns 2

我确保解释器中的所有案例都至少返回一些副作用 . 我'm now trying to implement the ternary operator (? :). The Expression tree I' m渲染看起来像这样:

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 .

我很感激任何帮助,这很令人烦恼!

1 回答

  • 15

    Expression.IfThenElseif (...) ... else ...; 构造,而不是三元运算符 .

    三元运算符是Expression.Condition

相关问题