> Dmitry Vazhov wrote: >> Hello, >> >> We already have :=== operator defined in Module, Range, Regexp and Proc >> which is great for case/when statement. For all other objects :=== mean >> :==. >> >> My suggestion is to extend Array with === method: I long ago did something similar, but much more extensive; I created a large pattern-matching language/library for ruby data structures called Reg. Instead of changing the existing Array#===, I created a new class, Reg::Array, which has the functionality you want. A Reg::Array can be constructed by enclosing the patterns of interest between +[ and ]. You should have a look at Reg; you can install the gem: gem install reg or take a look at the github project, which contains newer (and buggier) code: http://github.com/coatl/reg On 12/17/09, Dmitry Vazhov <dmitryelastic / gmail.com> wrote: > "Set" class has meaning close to "Range" class. If we will define > Set#=== as > > class Set > def ===( arg ) > self.any?{|template| template === arg } > end > end Personally, I would rather see Set#=== be an alias for include?. The alternation semantics that you want here are provided in Reg by Reg::Or, which is usually created by gluing together individual matchers that you want with the | operator. So it'd look like: Sexp = Array|Numeric instead of: Sexp = Set[Array, Numeric]