这是一个意想不到的发现。我之前没碰过的一个非常基本的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
关键字终止。
答案 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)
不是在外部if
和else
块中复制“否”答案,而是重写整个内容:
a = "a"
test = if a && a == "a"
"yes"
else
"no"
end
或者作为一个单行:
a = "a"
test = (a && a == "a") ? "yes" : "no"