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?
&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:
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
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
Jetzt können Sie scope_object.bound_proc
anstelle des instance_exec
Aufrufs oben aufrufen.
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.