Я пытаюсь смешать модуль с классом и хочу, чтобы некоторые методы вели себя как методы класса, а другие — как методы экземпляра.
Однако я не хочу, чтобы включали
ирасширяли
модуль. Я бы предпочел просто включить
его.
Когда я оборачиваю методы, которые я хочу сделать методами класса, в эту нотацию, это работает:
class <<
# ...
end
Однако, когда я использую эту нотацию, это не работает:
class << self
# ...
end
Я подозреваю self
ключевое слово устанавливает явную привязку к модулю, а не к классу, с которым он смешивается. Но я не видел никакой документации, в которой рекомендовалось бы отключать ключевое слово self
при использовании нотации class <<
.
Кто-нибудь знает, что с этим происходит?
ОБНОВЛЕНИЕ: вот пример кода для большей ясности:
module M
class <<
def class_method
puts "From inside the class_method"
end
end
def instance_method
puts "From inside the instance_method"
end
end
class Object
include M
end
class C
end
C.class_method
obj = C.new
obj.instance_method