27

使用 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..elsif..else 逻辑压缩成一行,这是我们最好的选择吗?

4

4 回答 4

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

或者

a = ("a" if foo) || ("b" if bar) || "c"
于 2012-12-12T21:25:10.937 回答
19

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

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

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

于 2012-12-12T21:26:41.787 回答
5

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

于 2012-12-12T21:25:39.163 回答
3

你也可以写:

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

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

于 2012-12-12T21:23:06.820 回答