Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class << self ;) клянусь, констракт для меня странноватый.class Car
def self.number
# ...
end
end
# тоже самое, что и...
class Car; end
class << Car # мы внутри синглтон-класса класса Car
def number
# ...
end
end
# тоже самое, что и...
class Car
# self == Car, поэтому мы снова внутри синглтон-класса Car
class << self
def number
# ...
end
end
end
class Car; end
bmw = Car.new
class << bmw # мы внутри синглтон-класса объекта bmw
def number
'abc'
end
end
# тоже самое, что и...
def bmw.number
'abc'
end
bmw.number #=> 'abc'
Когда начинаешь копать глубже типичного использования include и extend, то обнаруживаешь нечто странное и пугающее. Однако стоит понять реализацию лежащую в основе и все сразу обретает смысл.
Вникаем в include и extend