Ruby条件

时间:2014-07-30 13:41:00

标签: ruby

我想从两个表达式中获取任何真值,例如2,或者什么都不做。可以这样做:

if exp1
  a = exp1
elsif exp2
  a = exp2
end

我试图缩短它,并有以下内容:

a = 1 if exp1|| 2 if exp2

然而,在这种情况下,ruby会返回1。 ruby中执行此操作的正确语法是什么?

4 个答案:

答案 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。)