Что делает этот метод «метакласса»?

#ruby

#ruby

Вопрос:

 def metaclass; class << self; self; end; end
  

Может кто-нибудь расшифровать эту строку для меня. Я думаю, тот факт, что он втиснут в один, тоже не сильно помогает. Но, начав изучать ruby всего 2 дня назад, я боюсь, что могу неправильно его разделить.

Ответ №1:

Разбивая его на части:

 def metaclass
  class << self
    self
  end
end
  

Обратите внимание, что это доступно как встроенный метод в Ruby 1.9.2 ( Object#singleton_class ).

Что это делает, так это возвращает singleton_class / метакласс / собственный класс объекта путем открытия того же самого через class << self , а затем возвращает его ( self ). Если вас смущают метаклассы как таковые, я бы порекомендовал следующую статью:

Объектная модель Ruby — структура и семантика

Комментарии:

1. Странно, что точка с запятой не требуется после имени метода metaclass в оригинале OPs.

2. @sawa Что ты имеешь в виду? irb> def metaclass class << self; self; end; end #=> SyntaxError: (irb):1: syntax error, unexpected keyword_class, expecting ';' or 'n'

3. @Phrogz Это именно то, что я имею в виду. Вопрос был таким и был отредактирован за 7 минут до вашего комментария.