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

Antwort per Email an