In Ruby möchte ich eine Klasse haben eine Reihe von Modulen und haben diese einzelnen Module führen einen Block oder eine Methode (oder nur eine Möglichkeit zum Bearbeiten einer Instanzvariable finden) bei der Initialisierung dieser Klasse. Ich weiß, dass ich dies tun kann, indem ich eine Methode im Modul erstelle und sie dann in der Initialisierungsmethode der Klasse aufruft, aber ich möchte einen Weg finden, indem ich einfach das Modul einschließe und eine Methode aufrufe, um den Code zu initialisieren Auf diese Weise kann ich eine große Menge von Dingen in einer Klasse enthalten, ohne sich Gedanken darüber machen zu müssen, eine Codezeile in der Initialisierungsmethode für jedes einzelne Modul hinzuzufügen. Ich habe Aliasing ausgecheckt, super, und die damit verbundenen Dinge aber haben nichts bekommen ... Wenn es hilft zu verstehen, was ich hoffe, hier zu erreichen ist einige Pseudo-Code:Ruby: Hinzufügen von Dingen zu initialisieren Methode durch Module
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]
Dies kann ein wenig wortreich aber ich denke, der Titel fasst zusammen, was ich zu tun versuche. Danke für jede Hilfe!
Sie haben Recht, ich schaute in, wie super funktioniert und ich bin in der Lage, Code für eine beliebige Anzahl von Modulen auszuführen, egal welche Kombination oder welche Module. Grundsätzlich eine Kette von Super für die Module gemacht: – thIIIrd
Das ist so Geld, danke. Ich habe dies verwendet, um 'fähigkeit.rb' Dateien für ein Rails CanCan Autorisierungsmuster zu separieren: http://StackOverflow.com/a/25723811/293280 –