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

def moin
  "moin"
end

Scope.doit { puts moin } # => moin

class Scope
  def self.moin
    "fail"
  end
end

Scope.doit { puts moin } # => fail

ahoi


Am 06.05.2012 um 11:36 schrieb Hendrik Mans:

> Einen wundervollen Sonntagmorgen euch allen.
> 
> Ich experimentiere aus Spaß an der Freude, und weil ich dieses Wochenende 
> Strohwitwer und zum Spazierengehen zu faul und langweilig bin, mit 
> verschiedenen DSL-Implementierungs-Ansätzen herum. Ja, ich weiß, eigentlich 
> sollte ich raus gehen und ein Eis essen oder mich mit Freunden treffen oder 
> wenigstens ein gutes Buch lesen, aber so ist halt mein Leben. Ruby ist mein 
> Freund, method_missing meine Eiskrem, und… ach, ich schweife ab.
> 
> Jedenfalls kommt dabei gerne mal instance_exec zum Einsatz. instance_exec ist 
> superdipupertoll. Es führt einen Block/Proc/lambda/etc. in einem anderen als 
> dem ursprünglichen Scope aus. Praktisch! Aber ich stolpere immer wieder über 
> Blogartikel/Tweets/Seniorarchitekten, die instance_exec voll doof finden. Nur 
> leider immer ohne schlüssige Erklärung.
> 
> Ist von euch vielleicht jemand der größte Meta-Programmer aller Zeiten und 
> kann da etwas Licht drauf werfen? Ist instance_exec eine schlechte Idee? Wenn 
> ja, warum, und: wie macht man's sonst?
> 
> Freue mich auf Input. INPUT INPUT INPUT.
> 
> H.
> _______________________________________________
> 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