Ruby:单行 If-Then-Else

Apo*_*ica 11 ruby syntax

我想知道 Ruby 中是否有一种方法可以使用类似于 python 的方式使用单词作为运算符编写一行 if-then-else 语句

a if b else c
Run Code Online (Sandbox Code Playgroud)

我知道经典的三元条件,但我感觉 Ruby 更像是一种“wordsey”语言而不是“symboley”语言,所以我试图更好地封装语言的精神。

这个方法我也知道,

if a then b else c end
Run Code Online (Sandbox Code Playgroud)

这基本上是将多线压扁到一条线上,但线end的末端感觉繁琐和多余。我认为三元条件会比这个更可取。

那么对于熟悉 Ruby 的你来说,有没有更好的写法呢?如果不是,哪种方法最像 Rubyesque?


链接的帖子未解决以下问题:

  1. 有没有比if a then b else c end在 Ruby 中编写“wordsey”单行 if-then-else 更简洁的方法?
  2. 三元条件或 wordsey 版本更适合 Ruby 范式吗?

Dar*_*one 18

存在的两个单衬是您已经描述的两个:

三元:

a ? b : c
Run Code Online (Sandbox Code Playgroud)

如果结构:

if a then b else c end
Run Code Online (Sandbox Code Playgroud)

所以回答你的问题:

  1. 不。
  2. 根据thisthis首选三元 ,而根据thisthis首选 if-struct 。Ruby 没有官方的风格指南,恐怕你找不到具体的答案。就我个人而言,我使用 if-struct,因为它可以减少认知负担,如果更冗长的话。

然而,大多数风格指南都说三元运算符适用于简单的结构:

Avoid the ternary operator (?:) except in cases where all expressions are extremely trivial.
Run Code Online (Sandbox Code Playgroud)