Python具有非常优雅的语法,可以针对多种模式检查值。
2 in [1,2,4] #=> True
6 in [1,2,4] #=> False
Ruby版本的订单感觉不对:
[1,2,4].include?(2)
我知道include?
比2.included_in?([1,2,4])
更有意义,我仍然不喜欢它。 Ruby甚至有in
个关键字,但似乎只在构造for i in [1,2,4]
中使用,而不是用于成员资格测试。
另一种方式是:
(case 2 when 1,2,4 then true end)
相当详细,但允许模式测试:
(case file_name when "README", /\.txt\z/ then true end)
仍然不太可读。
我偶然错过了一些非常漂亮的方式吗?
答案 0 :(得分:7)
正如@deceze所说,你可以实现自己的:
class Object
def in(ar)
ar.include? self
end
end
irb(main):013:0> 's'.in ['a', 'b', 'c']
=> false
irb(main):014:0> 's'.in ['a', 'b', 'c', 's']
=> true
irb(main):015:0> 5.0.in [3.2, 5.0, 1.2]
=> true
irb(main):016:0> 4.0.in [3.2, 5.0, 1.2]
=> false
答案 1 :(得分:3)
我认为引入“更常见”模式的好处并不值得使用具有特定用途的新语法结构来加重语言,特别是因为使用.include?
既不乏味也不反直觉想一想。
另一方面,是什么阻止您实施和使用Object#included_in?
方法?
答案 2 :(得分:2)
$ gem install sane
$ irb
>> 3.in? [1,2,3]
>> true