根据if语句选择数组中的元素

时间:2016-01-03 15:01:08

标签: ruby

我想根据Ruby中的条件值依次打印两个字符串中的一个。

当然,它总是以最经典的方式完成:

if a==1 then puts "Yes!" else puts "No!" end

甚至

puts (a==1 ? "Yes!" : "No!")

但我正在寻找使用列表/数组的更多Ruby / Python方式。在Python中,它可以通过以下方式完成:

print ['Yes', 'No'][1==2]

使用Ruby有没有类似的方法来实现这一点?上面的代码(用Ruby编写)不起作用,因为布尔值作为索引而且它没有即使我尝试(1==2).to_i ... 有什么想法吗?

5 个答案:

答案 0 :(得分:5)

如果您的a是数字,则可以执行以下操作:

puts ["Yes!", "No!"][a <=> 1]

答案 1 :(得分:2)

我从未在红宝石世界中看到过python方式

但你可以开课。

class TrueClass
  def to_agreement   # any method name you want
    'Yes'
  end
end

class FalseClass
  def to_agreement
    'No'
  end
end

或者,我建议使用模块

module Agreementable
  def to_agreement
    self ? 'Yes' : 'No'
  end
end

TrueClass.include Agreementable
FalseClass.include Agreementable

以上两种方式,你可以使用

true.to_agreement #=> 'Yes'
false.to_agreement #=> 'No'
(1==2).to_agreement #=> 'No'

这是红宝石的方式。

答案 2 :(得分:2)

puts({true => 'Yes', false => 'No'}[a == 1])

答案 3 :(得分:1)

getClientOriginalExtension()

答案 4 :(得分:1)

您可以将to_i方法添加到TrueClassFalseClass

class TrueClass
    def to_i
        1
    end
end

class FalseClass
    def to_i
        0
    end
end


p ['yes', 'no'][(2==2).to_i]