Trans
2/27/2008 12:07:00 PM
On Feb 26, 11:24 pm, Clifford Heath <n...@spam.please.net> 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.