
Question:
Python has really elegant syntax for checking a value against several patterns.
2 in [1,2,4] #=> True 6 in [1,2,4] #=> False
Order in Ruby version just feels wrong:
[1,2,4].include?(2)
I understand that include?
makes a lot more OO sense than 2.included_in?([1,2,4])
, I still don't like it. Ruby even has in
keyword but it seems to only be used in construct for i in [1,2,4]
, not for membership tests.
Another way is this:
(case 2 when 1,2,4 then true end)
Quite verbose, but allows patterns test:
(case file_name when "README", /\.txt\z/ then true end)
Still not very readable.
Am I missing some really nifty way by chance?
Solution:1
$ gem install sane
$ irb
>> 3.in? [1,2,3] >> true
Solution:2
As @deceze says, you can implement your own:
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
Solution:3
I guess that the benefit of introducing "more common" pattern was not worth burdening the language with a new syntax construct with very specific use, especially because using .include?
is neither tedious, nor counter-intuitive, when you think of it.
On the other hand, what prevents you from implementing and using Object#included_in?
method?
Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
EmoticonEmoticon