Создание объектов из объектов?Или я заблуждаюсь - PullRequest
3 голосов
/ 31 августа 2011

Что происходит в следующем коде

A = Class.new

class << A
  def speak
    puts "Dave"
  end
end

A.speak
B = A.new 

Как это возможно, что на самом деле происходит.и что такое класс "Class".

1 Ответ

4 голосов
/ 31 августа 2011
A = Class.new

Это похоже на:

class A
end

Поскольку вы определяете пустой класс и присваиваете ему имя A.(Примечание: в Ruby принято, что идентификаторы, начинающиеся с заглавной буквы, являются константами.)

class << A
  def speak
    puts "Dave"
  end
end

аналогично:

class A
  def A.speak
    puts "Dave"
  end
end

Здесь вы определяете метод класса для A (в отличие от метода экземпляра).

Строка:

A.speak

просто вызывает метод класса.

Наконец:

B = A.new

создает экземпляр класса A и присваивает его константе B.


Чтобы ответить на другой ваш вопрос.Класс Class это ... Class!Вы можете увидеть это в irb:

irb(main):022:0> Class.class
=> Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...