Ruby if .. elsIf .. else on a single line?
使用Ruby三元运算符,我们可以为简单的if-else构造编写以下逻辑:
1 | a = true ? 'a' : 'b' #=>"a" |
但如果我想把它写成
我可以这样写,但有点难理解:
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语句保留一个行程序,并避免使用嵌套的三元运算符。您可以使用
1 | if foo then 'a' elsif bar then 'b' else 'c' end |
如果发现控制语句过于复杂,则可以使用案例(Ruby的switch操作符)。
你也可以写:
1 | x = if foo then 'a' elsif bar then 'b' else 'c' end |
然而,这并不是Ruby中的惯用格式。