关于语法:ruby:单行 if then else

Ruby: One-Line If-Then-Else

本问题已经有最佳答案,请猛点这里访问。

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

1
a if b else c

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

我也知道这种方法,

1
if a then b else c end

这基本上是把一个多衬板挤到一条线上,但线的末端的end显得笨重和多余。我认为三元条件比这个更好。

所以对于你这些很了解鲁比的人来说,有没有更好的方法来写这个?如果不是,哪种方法是最鲁莽的?

以下问题未通过链接邮件解决:

  • 有没有比if a then b else c end更简洁的方法来写一行"wordsey",如果用ruby写的话,那么用另一行呢?
  • 三元条件还是Wordsey版本更适合Ruby范式?

  • 存在的两个一行程序是您已经描述的两个:

    Ternary:

    1
    a ? b : c

    如果结构:

    1
    if a then b else c end

    所以要回答你的问题:

  • 不。
  • 根据这个,这个,这个而根据这个和这个,if结构是首选的。Ruby没有正式的风格指南,恐怕你找不到具体的答案。就我个人而言,我使用if结构,因为它可以减少认知负荷,如果更冗长的话。
  • 然而,所有大多数样式指南都说三元运算符对于简单的构造都是很好的:

    1
    Avoid the ternary operator (?:) except in cases where all expressions are extremely trivial.

    Ruby非常灵活,通常用于创建特定于域的语言(DSL),虽然这个示例实际上不是DSL,但您可以使用它在对象类上创建更具表现力的三元方法。

    1
    2
    3
    4
    5
    6
    7
    8
    def the_value(val, as_long_as:, otherwise:)
      as_long_as ? val : otherwise
    end

    some_thing = the_value 4, as_long_as: 1 > 0, otherwise: 5
    => 4
    some_thing = the_value 4, as_long_as: 1 < 0, otherwise: 5
    => 5

    您可以更改方法名和参数以适应您喜欢的任何上下文。

    PS:假设Ruby版本大于等于2.1