From: Trans Date: 2008-02-27T21:06:59+09:00 Subject: Re: Delegate to allow subclassing Integer, Float On Feb 26, 11:24 pm, Clifford Heath wrote: > I have the following code using facets/basicobject with 1.8, > and want to know what the equivalent would be for 1.9: > > class Real < BasicObject > def initialize(r) > @__value = r.to_f > end > > define_method(:class) { __self__.class } > > def send(meth, *a, &b) > # Ensure that normal sends go to __self__, not @__value > __self__.send(meth, *a, &b) > end > > private > def method_missing(meth, *args, &block) > @__value.send meth, *args, &block > end > end > > (and similar, defining Int for integers). > > This seems to be ok with 1.8, but 1.9 doesn't have __self__. > > Any thoughts? I'm surprised to see __send__ and class are not defined, since it is easy enough to override them if need be. Creating them from scratch is a bit tricky --in fact for #class how is it even possible? Well, not perfect, but you can do: def class; Real; end as long as Real won't be subclassed; and require 'facets/kernel/as' def send(meth, *a, &b) send_as(BasicObject, meth, *a, &b) # or as(BasicObject).send(meth, *a, &b) end But why do you not want send to route to method_missing, after all what other methods are there to call? T.