我想根据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
...
有什么想法吗?
答案 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
方法添加到TrueClass
和FalseClass
class TrueClass
def to_i
1
end
end
class FalseClass
def to_i
0
end
end
p ['yes', 'no'][(2==2).to_i]