ich Moose
(insbesondere MooseX::Declare
) unter Verwendung ein Iterator-Objekt zu erstellen, die eine Iter
next
Methode, Zustand und gibt 0
1
oder je nach Bedarf in einer while
Anweisung zur Verwendung vorrückt hat. Das Problem, auf das ich stoße, ist, dass next
abhängig von der Existenz eines der Konstruktionsparameter zwei sehr unterschiedliche Operationen ausführen muss. So wie ich es sehe ich habe fünf Optionen:Wie kann man einen Methodenkörper zur Konstruktionszeit am besten zuweisen, wenn man Moose verwendet?
- wenn ... dann in
next
Methode - Unterklasse
- Hash-Versand
- Symboltabelle Manipulation
- Put-Methoden in verschiedenen Modulen und Last erforderlich eine an Bauzeit ist
Nummer 1 nur Amateur.
Nummer 2 ist, denke ich, die richtige OOP Art und Weise Dinge zu tun. Ich habe keine Einwände dagegen, es so zu machen, aber es scheint ein wenig übertrieben zu sein, einfach eine einzige Methode zu übergehen.
Ich habe oft Nummer 3 in der Vergangenheit verwendet, wenn prozedural oder pseudo-funktional arbeiten und es ist, was ich gerade mache.
Nummer 4 ist, wie wir alle wissen, voller Gefahr und ich weiß nichts über Elch-Eingeweide zu wollen beginnen herumspielen, wenn unnötig.
Das letzte Element, Nummer 5 scheint mir die vernünftigste (und Perl) aber wie Nummer 2, ist ein wenig zu viel Arbeit. Ich frage mich wirklich, ob es eine fünfte Möglichkeit gibt, die ich nicht in Betracht gezogen habe, wie zum Beispiel in die Metaklasse zu haken oder vielleicht ein MooseX
Modul, das einigermaßen reif ist.
Sie könnten weiter wollen erklären, was sollten die verschiedenen Aktionen sind, dass der Iterator durchführen. Es ist schwierig, Design-Ratschläge zu geben, ohne den vollen Anwendungsfall zu kennen. – phaylon
Nun, ich bin wirklich auf der Suche nach einer Best Practice und nicht Implementierungsdetails. Was ich gerade gut mache, aber ist Hash-Dispatching wirklich will ich im 'Moose'-Paradigma machen? Das ist der "Moosy" Weg, dies zu tun? – gvkv