On Mon, Apr 12, 2010 at 7:08 PM, Richard Leber <rleber / mindspring.com> wrot=
e:
> I am stumbling around some of the nuances of Ruby classes, especially in
> regard to alias_method. Specifically, can someone explain to me why this
> doesn't work:
>
> =A0class A
> =A0 =A0def A.foo
> =A0 =A0 =A0"Hello"
> =A0 =A0end
> =A0end
>
> =A0A.send(:alias_method, :bar, :foo) # =3D> NameError: undefined method
> `foo' for class `A'
>
> But this does:
>
> =A0class A
> =A0 =A0def A.foo
> =A0 =A0 =A0"Hello"
> =A0 =A0end
> =A0end
>
> =A0class << A
> =A0 =A0alias_method :bar, :foo
> =A0end
>
> =A0A.foo # =3D> Hello
> =A0A.bar # =3D> Hello
> --
> Posted via http://www.ruby-forum.com/.
>
Well alias_method aliases instance methods, as foo is not an instance
method of class A it cannot be aliased there. But as foo is an
instance method of the singleton class of A (class << A) it can be
aliased there.
IOW
class A
  def foo; 42 end
end
now foo is an instance method of A and not of (class << A) and thus
your A.send...
would work, as would
A.module_eval do
  alias_

or
class A
  alias_...
end


HTH
Robert
>



--=20
Learning without thought is labor lost; thought without learning is perilou=
s.=94
--- Confucius