Kann ich einen Block übergeben, der in ruby ​​einen Block auf instance_exec erwartet?

8

Ich erwarte den Code

%Vor%

soll ausgeben

%Vor%

Aber der Fehler ist

%Vor%

Kann ich einen Block übergeben, der selbst einen Block auf instance_exec in Ruby erwartet?

    
benjaminchanming 12.03.2013, 09:05
quelle

2 Antworten

4

&foo versucht, foo als Block an instance_exec zu übergeben, und Sie übergeben bereits einen expliziten Block. Wenn Sie das Und-Zeichen auslassen, wird foo genau wie jedes andere Argument gesendet (außer dass es sich um eine Proc -Instanz handelt). Also, versuchen Sie es stattdessen:

%Vor%

Dies bedeutet auch, dass Sie etwas tun können wie:

%Vor%

Und das gleiche Ergebnis erhalten.

Weitere Informationen finden Sie unter Unterschied zwischen block und & amp; block in Ruby

    
Mladen Jablanović 12.03.2013, 09:40
quelle
2

Ich bin etwa drei Jahre zu spät zu dieser Party, aber ich dachte, ich würde einen Ansatz teilen, mit dem du den inneren Block mehr wie einen echten Block behandeln würdest, anstatt nur ein einfaches altes Argument.

Der beste Weg, den ich kenne, ist, ein Objekt zu erstellen, das als bindender Kontext fungiert und den äußeren Block als Methode definiert. Also, wenn ich das ursprüngliche Beispiel wie folgt ohne den Aufruf instance_exec umschreiben ...

%Vor%

Wir können outer_proc als Methode für ein Objekt definieren

%Vor%

Jetzt können Sie scope_object.bound_proc anstelle des instance_exec Aufrufs oben aufrufen.

%Vor%

Sie erhalten:

%Vor%

Leider bekommst du einen LocalJumpError, wenn du versuchst, in outer_proc statt in inner_block.call nachzugeben, ich bin mir nicht ganz sicher warum. Wenn jemand diese Antwort hat, dann wäre ich interessiert.

    
Erick J 17.11.2016 22:55
quelle

Tags und Links