thanks for the comments from yashi and dave! frankly, this is not really a complete proposal, it is just a crude implementation to explore the idea :) Yashi said: > i don't have any objection for 'any?' and 'all?'. > > but, seems to me 'any' and 'all', or class Quantum is implicitly > assuming each object given to the receiver is class of Numeric. > > if class Quantum is assuming class Numeric, and method any and all is > assuming class Quantum, IMHO, they shouldn't be in the module > Enumerable. > > [...] I probably misunderstand your comments here, but I am not limiting it to only Numeric. when I tried the following, it works! p ['a','c'].any > 'b' # true p ['a','c'].all > 'b' # false > > ### the following is still illegal :( > > > > # a = 2 * [1,2,3] > > # b = 2 > [1,2,3].any > > these will work if you give a method called coerce. but again, I'm > not sure we are assuming Numeric as core object or not. thanks, and surely now we have p 2 > [1,2,3].any # true p 2 > [1,2,3].all # false however, I can't do it for string p 'b' > ['a','c'].any p 'b' > ['a','c'].all I do not understand. and using coerce rather than my original implementation give different results: Using my original implementation: p [1,2,3].any < [2,5,6].all # true It print out "false" using yashi's implementation. > btw, i'm not sure it's ok to swap self and other in method coerce. if > we can define Quantum#*, you can use it. but... > > one more thing. IMHO, it's better to use Symbol rather than String > for @method. thank you very much for commenting. I also modified the method_missing method in Quantum to: def method_missing(id, *arg) @states.collect! { |x| x.send(id, *arg)} self end so now it will also do this: p ['abc','df'].any.size > 2 # true p ['abc','df'].all.size > 2 # false p ['abc','df3'].any[1,2] > 'be' # true