#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
). Если вас смущают метаклассы как таковые, я бы порекомендовал следующую статью:
Комментарии:
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 минут до вашего комментария.