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

Noz*_*Noz 22 ruby logic

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

a = true  ? 'a' : 'b' #=> "a"
Run Code Online (Sandbox Code Playgroud)

但是,如果我想写这个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"
Run Code Online (Sandbox Code Playgroud)

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

saw*_*awa 44

a = (foo && "a" or bar && "b" or "c")
Run Code Online (Sandbox Code Playgroud)

要么

a = ("a" if foo) || ("b" if bar) || "c"
Run Code Online (Sandbox Code Playgroud)

  • `或`和`和`的关联性低于`&&`和`||`. (2认同)
  • 我喜欢这个......只要你学会优先,每个人都应该优先考虑`和`和`或'. (2认同)

sun*_*eja 16

Github上的Ruby风格指南建议一个衬垫用于琐碎保留如果被避免/ else语句和嵌套三元运算符.你可以使用then关键字,但它被认为是不好的做法.

if foo then 'a' elsif bar then 'b' else 'c' end
Run Code Online (Sandbox Code Playgroud)

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

  • `如果foo然后'a'elsif bar然后'b'其他'c'`在酒吧之后不需要半结肠 (2认同)
  • 在'c`之后我忘记了`end`.我们也需要补充一点. (2认同)

tjm*_*jmw 5

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