Ruby if ifeliner inside if语句产生错误

时间:2010-09-15 18:02:06

标签: ruby if-statement

这是一个意想不到的发现。我之前没碰过的一个非常基本的Ruby问题:

a = "a"

if a
  test = "yes" if a == "a" else "no"
else
  test = "no"
end

运行它会产生错误:

syntax error, unexpected kELSE, expecting kEND

看起来嵌套的oneliner溢出到封闭的if语句中。这是什么通用的解决方案?在爆炸的if语句中没有使用oneliner? (它在爆炸所附条件时起作用,因为它以end关键字终止。

顺便说一句,这是一个最小化的人为例子,所以不需要解释它的愚蠢或问题为什么我这样做。我正在寻找一个关于如何防止ruby oneliner的一般解释,如果语句溢出到封闭的条件范围内。

4 个答案:

答案 0 :(得分:6)

如果您想将if else放入一行,请使用then,如下所示:

if a then b else c end

并且,如果您愿意,可以使用;代替then,如下所示:

if a ; b else c end

此外,有时您可以使用此代替?:

a && b || c

答案 1 :(得分:2)

test = "yes" if a == "a" else "no"

不起作用,因为语言不允许,请尝试

test = a == "a" ? "yes" : "no"

答案 2 :(得分:0)

错误的原因是您在此行中使用了'if修饰符':

test = "yes" if a == "a" else "no"

如果修饰符只接受一个条件 - 那么syntax error, unexpected kELSE, expecting kEND

正如其他人所说,三元运算符是这些单行的理想选择。

答案 3 :(得分:0)

不是在外部ifelse块中复制“否”答案,而是重写整个内容:

a = "a"
test = if a && a == "a"
         "yes"
       else
         "no"
       end

或者作为一个单行:

a = "a"
test = (a && a == "a") ? "yes" : "no"