我想从两个表达式中获取任何真值,例如2
,或者什么都不做。可以这样做:
if exp1
a = exp1
elsif exp2
a = exp2
end
我试图缩短它,并有以下内容:
a = 1 if exp1|| 2 if exp2
然而,在这种情况下,ruby会返回1
。 ruby中执行此操作的正确语法是什么?
答案 0 :(得分:8)
这应该有效:
a = exp1 || exp2 || a
答案 1 :(得分:1)
a = exp1 ? exp1 : exp2 ? exp2 : a
相当于:
if exp1,
a is set to exp1
else if exp2,
a is set to exp2
else
a is set to a, which is virtually equivalent to doing nothing
答案 2 :(得分:0)
正确的语法:
a = (1 if false) || (2 if true)
答案 3 :(得分:0)
if exp1
a = exp1
elsif exp2
a = exp2
end
可以缩短为
a = if exp1
exp1
elsif exp2
exp2
end
或者,如果您更喜欢单行:
a = if exp1 then exp1 elsif exp2 then exp2 end
任何进一步缩短它的尝试都会改变语义。例如:
a = exp1 || exp2 || nil
最多只评估一次exp1
,最多评估exp2
一次,而原始代码段将评估exp1
一次或两次,exp2
评估两次或永不评估。
(公平地说:我的例子也会改变a
中出现的IFF exp1
的含义。在OP的原始代码中,a
出现在{exp1
中1}}将被解释为方法调用,在我的示例中作为局部变量解引用,将计算为nil
。)