Ruby:One-Line If-Then-Else

时间:2017-04-22 01:20:20

标签: ruby syntax

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

a if b else c

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

我也知道这个方法,

if a then b else c end

基本上将多线程压缩到一条线上,但线路末端的end感觉很麻烦且多余。我认为三元条件比这更好。

所以对于那些熟悉Ruby的人来说,有更好的方法来写这个吗?如果没有,哪种方法最像Rubyesque?

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

  1. 是否有一种比if a then b else c end更清晰的方式来写一个" wordsey" Ruby中的单行if-then-else?
  2. 三元条件或wordsey版本是否更适合Ruby范例?

2 个答案:

答案 0 :(得分:4)

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

三元:

a ? b : c

如果-结构:

if a then b else c end

所以回答你的问题:

  1. 没有
  2. 根据thisthis,首选三元, 而根据thisthis首选if结构。 Ruby没有官方风格指南,你不会找到我害怕的具体答案。就个人而言,我使用if-struct,因为它会减少认知负担,如果更加冗长的话。
  3. 然而,所有大多数风格指南都说三元运算符适用于简单的结构:

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

答案 1 :(得分:0)

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

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版本&gt; = 2.1