Ruby如果.. elsIf .. else在一行?

时间:2012-12-12 21:15:45

标签: ruby logic

使用ruby三元运算符,我们可以为一个简单的if else结构编写以下逻辑:

a = true  ? 'a' : 'b' #=> "a"

但是,如果我想将其写为if foo 'a' elsif bar 'b' else 'c'

,该怎么办?

我可以把它写成如下,但是有点难以理解:

foo = true
a = foo  ? 'a' : (bar ? 'b' : 'c') #=> "a"

foo = false
bar = true
a = foo  ? 'a' : (bar ? 'b' : 'c') #=> "b"

是否有更好的选择来处理这种情况,或者如果我们希望将if..elif..else逻辑压缩成一行,这是我们最好的选择吗?

4 个答案:

答案 0 :(得分:44)

a = (foo && "a" or bar && "b" or "c")

a = ("a" if foo) || ("b" if bar) || "c"

答案 1 :(得分:16)

Github Ruby Styleguide建议为简单的if / else语句保留一个衬里,并避免嵌套的三元运算符。您可以使用then关键字,但这被认为是不好的做法。

if foo then 'a' elsif bar then 'b' else 'c' end

如果发现控制语句过于复杂,可以使用案例(ruby的switch操作符)。

答案 2 :(得分:4)

a = if foo then 'a' elsif bar then 'b' else 'c' end

答案 3 :(得分:3)

你也可以写:

x = if foo then 'a' elsif bar then 'b' else 'c' end

但是,这不是Ruby中惯用的格式。

相关问题