关于逻辑:ruby 一行中if .. elsIf .. else

Ruby if .. elsIf .. else on a single line?

使用Ruby三元运算符,我们可以为简单的if-else构造编写以下逻辑:

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

但如果我想把它写成if foo 'a' elsif bar 'b' else 'c'呢?

我可以这样写,但有点难理解:

1
2
3
4
5
6
foo = true
a = foo  ? 'a' : (bar ? 'b' : 'c') #=>"a"

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

有没有更好的方法来处理这样的场景,或者如果我们希望将if..elsif..else逻辑压缩为一行,这是我们最好的选择?


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

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


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

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

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


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


你也可以写:

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

然而,这并不是Ruby中的惯用格式。