W Ruby chcę, aby klasa zawierała serię modułów i te poszczególne moduły wykonują blok lub metodę (lub po prostu znajdź jakiś sposób na edycję zmiennej instancji) podczas inicjowania tego klasa. Wiem, że mogę to zrobić, tworząc metodę w module, a następnie wywołując ją w metodzie inicjalizacji klasy, ale chcę w jakiś sposób to zrobić, po prostu włączając moduł i wywołując jedną metodę do wykonania dowolnego kodu dodawanego przez moduły w celu zainicjowania w ten sposób mogę mieć dużą ilość rzeczy zawartych w klasie bez martwienia się o dodanie linii kodu w metodzie inicjalizacji dla każdego dołączonego modułu. Mam wyrejestrowany aliasingu, super i podobnych rzeczy, ale nie dostał nic ... Jeśli to pomaga zrozumieć, co mam nadzieję osiągnąć tutaj jakiś pseudokod:Ruby: Dodawanie rzeczy do zainicjowania metody za pomocą modułów
module Mod1
call_this_block_on_initialize { @a.push 4 }
end
module Mod2
call_this_block_on_initialize { @a.push 5 }
end
class Test
attr_accessor :a
include Mod1
include Mod2
def initialize
@a = [1, 2, 3]
call_those_blocks_set_by_mods
end
end
t = Test.new
t.a # returns [1, 2, 3, 4, 5]
To może być nieco rozwlekły ale myślę, że tytuł podsumowuje to, co próbuję zrobić. Dzięki za pomoc!
Masz rację, przyjrzałem się, jak super działa i mogę wykonać kod dla dowolnej liczby modułów dodanych bez względu na kombinację lub moduły. Zasadniczo stworzyłem łańcuch supersów dla modułów: – thIIIrd
To są pieniądze, dziękuję. Użyłem tego do oddzielenia plików 'ability.rb' dla wzorca autoryzacji Rails CanCan: http://stackoverflow.com/a/25723811/293280 –