From: Yasushi Shoji Date: 2000-09-20T09:51:18+09:00 Subject: [ruby-talk:5017] Re: A QuantumSuperposition Proposal for Ruby At Wed, 20 Sep 2000 01:53:06 +0900, Huayin Wang wrote: > > # I have been play around the QuantumSuperpositions idea today and > # have come up with the following. > # > # All the classes that implement Enumerable should have 4 > # more methods: > # > # any? all? any all 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. [...] > ### 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. 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. -- yashi class Quantum def initialize(o,t) @states = o @method = t end def any @method = :any? self end def all @method = :all? self end def eigenstates @states.collect { |x| x.eigenstates } end # methods which returns true or false should be defined # otherwise it will be cached by 'method_missing' def >(o) @states.send(@method) { |x| x > o } end def <(o) @states.send(@method) { |x| x < o } end def ==(o) @states.send(@method) { |x| x == o } end def method_missing(id, arg) @states.collect! { |x| x.send(id, arg)} self end def coerce(o) return self, o end end module Enumerable def any? self.each do |x| return true if yield(x) end return false end def all? self.each do |x| return false unless yield(x) end return true end def any return Quantum.new self, :any? end def all return Quantum.new self, :all? end end