我想测试a
是否等于1 或 2
我能做到
a == 1 || a == 2
但这需要重复a
(这对于较长的变量会很烦)
我想做a == (1 || 2)
之类的事情,但显然这不起作用
我可以做[1, 2].include?(a)
,这不错,但让我觉得位难以阅读
只是想知道如何使用惯用的红宝石
答案 0 :(得分:37)
你的第一种方法是惯用的Ruby。不幸的是,Ruby没有相应的Python a in [1,2]
,我认为这会更好。你[1,2].include? a
是最接近的选择,我认为从最自然的方式来看,它有点落后。
当然,如果你经常使用它,你可以这样做:
class Object
def member_of? container
container.include? self
end
end
然后你可以a.member_of? [1, 2]
。
答案 1 :(得分:11)
我不知道你在什么情况下使用它,但是如果它适合于switch语句,你可以这样做:
a = 1
case a
when 1, 2
puts a
end
其他一些好处是,当使用case equality ===运算符时,如果需要,可以为不同的行为覆盖该方法。另一个是,如果符合您的使用案例,您也可以使用范围:
when 1..5, 7, 10
答案 2 :(得分:8)
一种方法是请求“Matz”将此功能添加到Ruby规范中。
if input == ("quit","exit","close","cancel") then
#quit the program
end
但是case-when语句已经让你做到了这一点:
case input when "quit","exit","close","cancel" then
#quit the program
end
当写在这样的一行上时,它起作用,几乎看起来像一个if语句。最底层的例子是顶级例子的一个很好的临时替代吗?你是法官。
答案 3 :(得分:5)
首先把它放在某个地方:
class Either < Array
def ==(other)
self.include? other
end
end
def either(*these)
Either[*these]
end
然后,然后:
if (either 1, 2) == a
puts "(i'm just having fun)"
end
答案 4 :(得分:5)
你可以使用像
这样的交集([a] & [1,2]).present?
另一种方式。
答案 5 :(得分:3)
a.to_s()=~/^(1|2)$/
答案 6 :(得分:0)
也许我在这里很厚,但在我看来:
(1..2) === a
...作品。
答案 7 :(得分:0)
Include 绝对是去这里的方法。 ?
%w[cat dog].include?(type)