Сравнение методов класса Ruby с методами в собственных классах

Являются ли методы и методы класса в собственном классе (или метаклассе) этого класса всего лишь двумя способами определения одной вещи?

В чем разница?

class X
  # class method
  def self.a
    "a"
  end

  # eigenclass method
  class << self
    def b
      "b"
    end
  end
end

Есть ли различия в поведении Xa и Xb ?

Я понимаю, что могу перезаписывать методы класса или использовать псевдоним, открывая собственный класс:

irb(main):031:0> class X; def self.a; "a"; end; end
=> nil
irb(main):032:0> class X; class << self; alias_method :b, :a; end; end
=> #<Class:X>
irb(main):033:0> X.a
=> "a"
irb(main):034:0> X.b
=> "a"
irb(main):035:0> class X; class << self; def a; "c"; end; end; end
=> nil
irb(main):036:0> X.a
=> "c"
14
задан crispy 18 November 2010 в 16:18
поделиться