das ist per-se eine gute idee. ich hatte da vor etwas längerer zeit auch mal was zu gebloggt: http://blog.nofail.de/2010/02/writing-your-own-dsl-with-ruby/
ich kann dir ansonsten auch noch folgende bücher empfehlen, die auf solche dinge sehr detailliert eingehen: http://www.amazon.de/Ruby-Programming-Language-David-Flanagan/dp/0596516177/ref=sr_1_1?ie=UTF8&qid=1336503515&sr=8-1 http://www.amazon.de/Ruby-Best-Practices-Gregory-Brown/dp/0596523009/ref=sr_1_1?ie=UTF8&qid=1336503522&sr=8-1 ahoi Am 07.05.2012 um 13:16 schrieb Hendrik Mans: > Ich danke euch allen für euer Feedback. Was ich daraus mitnehme: > instance_exec (und instance_eval) sind potenziell gefährlich, weil im > schlimmsten Fall schwierig zu findende Scoping-Bugs entstehen können -- aber > sonst nicht weiter bedenklich (Performance etc.). > > Für meine kleine DSL habe ich mich dazu entschieden, über das Abfragen von > #arity beide DSL-Stile zu unterstützen (siehe > <http://blog.grayproductions.net/articles/dsl_block_styles>.) Ob das eine > gute oder bescheuerte Idee war, wird sich dann in der Praxis zeigen. Yeah, > Praxis! > > H. > > -- > Hendrik Mans: freier Entwickler und Berater. Moderne Webanwendungsentwicklung > und alles, was dazu gehört. > > http://www.mans.de :: +49-171-6858501 :: hend...@mans.de > > > On Monday, 7. May 2012 at 07:07, Michael Schuerig wrote: > >> On Sunday 06 May 2012, Peter Schröder wrote: >>> hi hendrik, >>> >>> instance_exec hab ich zwar noch nie benutzt, aber dafür schon diverse >>> probleme mit instance_eval gehabt. >>> >>> pascal hat das problem mit dem scope schön beschrieben. >>> >>> wenn man das aus der sicht des dsl-benutzenden darstellen möchte, >>> dann sollte man sich vergegenwärtigen, dass es schwer zu ersehen >>> ist, ob die sachen, die man im block (der "closure") verwendet denn >>> tatsächlich die sind, die man erwartet, der zugriff auf methoden ist >>> nicht transparent: >>> >>> class Scope >>> def self.doit(&block) >>> instance_eval(&block) >>> end >>> end >> >> >> >> [...] >> >> Wie wäre etwas in dieser Art: >> >> class Scope >> def doit(context, &block) >> delegate_missing_to(context) >> copy_instance_vars(context, self) >> instance_eval(&block) >> copy_instance_vars(self, context) >> end >> end >> >> Michael >> >> -- >> Michael Schuerig >> mailto:mich...@schuerig.de >> http://www.schuerig.de/michael/ >> _______________________________________________ >> rubyonrails-ug mailing list >> rubyonrails-ug@headflash.com (mailto:rubyonrails-ug@headflash.com) >> http://mailman.headflash.com/listinfo/rubyonrails-ug > > > > _______________________________________________ > rubyonrails-ug mailing list > rubyonrails-ug@headflash.com > http://mailman.headflash.com/listinfo/rubyonrails-ug _______________________________________________ rubyonrails-ug mailing list rubyonrails-ug@headflash.com http://mailman.headflash.com/listinfo/rubyonrails-ug