Mam moduł z metodami, które zapisują do dziennika. Do każdej wiadomości chcę wstawić nazwę klasy, która zalogowała tę wiadomość.self.class.name w module typu mix-in
Moduł można mieszać przy użyciu include
lub . Potrzebuję, aby mój log miał prawidłowe nazwy klas w każdym przypadku.
kod destylowana:
module M
def f
self.class.name
end
end
class C
extend M
include M
end
p C.f # => "Class"
p C.new.f # => "C"
Jak widać, pierwsze wywołanie niepoprawnie drukuje "Class"
. Chcę też, żeby to było "C"
.
Jak to zrobić?
To nie działa w ogóle, jeśli 'przedłużyć M', choć. –
Nie musisz przedłużać. Metody, które chcesz przekształcić w metody klasowe umieszczone w module ClassMethods. :) – Kaeros
Co, jeśli chcę tylko rozszerzyć i nie uwzględnić? Następnie muszę zrobić 'extend M :: ClassMethods' bez ważnego powodu. Osobiście też po prostu nie lubię całego wzorca rozszerzania się po włączeniu. –