From: Benoit Daloze Date: 2009-12-18T19:09:11+09:00 Subject: Re: Suggestion of Array#=== which improves case/when behavio --0016363b9d92cc4f83047afded6a Content-Type: text/plain; charset=ISO-8859-1 Hi, It doesn't look too usefull to me like that. (I mean using classes to compare). For this purpose I wrote something like: # Analyse arguments given to a method(*args) # # Exemple: # def m(*args) # case args # when ARGS[Complex] # m(Complex.new(1,1)) # when ARGS[Integer, Boolean] # m(2, true) # when ARGS[[Numeric, Float], String] # m([1, 3.14], "Hello World!") # when ARGS[[[Integer, Integer],[Float, Rational ]]] # m( [[1 , 2 ],[3.0 , Rational(1,2)]]) # end # end module Boolean; end class FalseClass; include Boolean; end class TrueClass; include Boolean; end class ARGS def initialize(*constraints) @constraints = constraints end def ARGS.[](*constraints) ARGS.new(*constraints) end def match?(args) return false unless @constraints.length == args.length @constraints.each_with_index { |constraint, i| case constraint when Module unless args[i].is_a?(constraint) return false end when Array unless args[i].is_a?(Array) && ARGS[*constraint].match?(args[i]) return false end end } true end def ===(args) match?(args) end end ------- Some mails ago, I also thought Array#=== implemented a OR-related test like in: case 2 when -1,1,2 ... end But that seems to be more a feature of the "block" case. So, I think this trick can be useful in special "cases", but I don't see enough interest to do that for the Ruby core. Any exemples more attractive ? 2009/12/18 Dmitry Vazhov > So, my question is: Do you agree that Array#=== can be useful for us? > > My opinion is that it can be in ruby std library along with > Proc#===(which is already in ruby 1.9 -- > > http://www.aimred.com/news/developers/2008/08/14/unlocking_the_power_of_case_equality_proc/ > ) > > -- > Posted via http://www.ruby-forum.com/. > > --0016363b9d92cc4f83047afded6a--