gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:31:56 25 4
gpt4 key购买 nike

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

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

对于函数体是一系列表达式,我没有问题-总是返回最后一个表达式的值,而且我确保解释器中的所有情况至少都会返回一些副作用。我现在正在尝试实现三元运算符(?:)。我正在渲染的表达式树如下所示:
work = Expression.IfThenElse(                                   
Expression.IsTrue(Expression.Convert(work, typeof(Boolean))),
trueExp,
falseExp);

其中trueExp和falseExp均为有效表达式。

问题似乎在于IfThenElse表达式不返回值,因此,即使trueExp和falseExp正在构建表达式树,基本上,IfThenElse表达式的最终结果始终为null。除了制作一个Runtime函数并显式调用它之外,还有没有办法使用DLR实现三元运算符? (即:是否执行IfThenElse并返回true和false子句中的实际值的表达式?)

我希望解析的是这样的:
F := (x) -> (x = 1) ? 4 : 5
F(1) #4
F(2) #5

但是现在,由于上面概述的问题,当将其编译到程序中时,此方法始终返回null。

我将不胜感激,这非常令人讨厌!

最佳答案

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

三元运算符为 Expression.Condition

关于ternary-operator - 如何在DLR中实现三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com