Próbuję połączyć moduł z klasą i chcę, aby niektóre metody zachowywały się jak metody klasy, a inne były metodami instancji.klasa << notacja w modułach
Jednak nie chcę zarówno dla include
iextend
modułu. Wolę tylko include
to.
Kiedy owinąć metody chcę być metody klasy w tym zapisie to działa:
class <<
# ...
end
Jednak kiedy używam tego zapisu nie działa:
class << self
# ...
end
I podejrzenie, że słowo kluczowe self
ustanawia wyraźne powiązanie z modułem, a nie z klasą, w którą się miesza. Ale nie widziałem żadnej dokumentacji, która zaleca pozostawienie słowa kluczowego self
wyłączone podczas korzystania z notacji class <<
.
Czy ktoś wie, co się dzieje z tym?
UPDATE: Oto niektóre przykładowy kod dla większej jasności:
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
Huh, czy coś mi umknęło? 'class << end' jest błędem składni. – sepp2k