Mam pytanie w jaki sposób "udajecie " interfejsy.
Tzn mam pewien moduł chciałbym żeby przy includowaniu modułu w danej klasie wymusić implementacje pewnych atrybutów bądź metod. Jak to zrobić??
Mam pytanie w jaki sposób "udajecie " interfejsy.
Tzn mam pewien moduł chciałbym żeby przy includowaniu modułu w danej klasie wymusić implementacje pewnych atrybutów bądź metod. Jak to zrobić??
cały sęk w tym, że nie udajemy
poczytaj o duck typingu, powinno Ci to troszkę rozjaśnić dlaczego jest to zrobione tak a nie inaczej
[quote=mich]Mam pytanie w jaki sposób "udajecie " interfejsy.
Tzn mam pewien moduł chciałbym żeby przy includowaniu modułu w danej klasie wymusić implementacje pewnych atrybutów bądź metod. Jak to zrobić??[/quote]
Ja z reguły daję:
def foo
raise NotImplemented
end
ale o tym się dowiesz dopiero jak zainludujesz i będziesz chciał uzyć foo
W railsach jest coś takiego jak ActiveModel::Lint, czyli testy, które sprawdzają kompatybilność klasy z ActiveModel, może w tę stronę? Inaczej musiałbyś w jakiś sposób sprawdzać przy includowaniu czy metody są zaimplementowane, co później może Cię ugryźć jak będziesz chciał część metod dorzucić w innym module, albo później, albo zrobić coś innego o czym teraz nie pomyślisz (a przy dynamiczności rubiego nie jest o taką sytuację ciężko ).