• [^] # Re: Pour ma part, je ne passerais pas par des classes mais par des mixin

    Posté par . En réponse au message Système de plugins. Évalué à 2. Dernière modification le 17 août 2013 à 16:44.

    J'ai pas pu m'empêcher de tester ... Méchant, j'avais d'autres choses à faire ... :)

    Voici la piste que je prendrais :

    #!/usr/pkg/bin/ruby
    module Event1
     def self.onEvent1()
     puts("Event 1 deected")
     end
    end
    class Test
     def method_missing(name, *args)
     puts("Method missing : #{name}, args: #{args}")
     mod=name.to_s().sub("on","")
     code=%Q{#{mod}.#{name.to_s()}}
     puts(code)
     begin 
     eval(code)
     rescue NameError
     puts("Module #{mod} does not exists")
     end
     end
    end
    t=Test.new()
    t.onEvent1()
    t.onEvent2()
    

    Le module event2 n'existe pas donc tu auras une erreur interceptée par begin/rescue (traitement des exceptions en Ruby).

    Il y a une partie de metaprogrammation pour appeler le bon module, je peux expliquer si tu comprends pas (mais là j'ai pas le temps, peut-être ce soir si ça t'intéresse).

    En tout cas si tu arrives à comprendre ça, et que ça peut t'aider à smplifier ton code, tant mieux.