Gibt es einen Unterschied, wenn Sie Foo mit instance_eval definieren:. . .Ist 'yield self' das selbe wie instance_eval?
class Foo
def initialize(&block)
instance_eval(&block) if block_given?
end
end
. . . oder mit 'Ausbeute Selbst':
class Foo
def initialize
yield self if block_given?
end
end
In jedem Fall können Sie dies tun:
x = Foo.new { def foo; 'foo'; end }
x.foo
So 'yield self
' bedeutet, dass der Block nach Foo.new immer im Zusammenhang mit der ausgewertet wird Foo Klasse.
Ist das korrekt?
Meinst du nicht in deinem "Edit to clear", dass das self dem obj im Block zurückgegeben wird? Vielleicht lese ich es nur anders, aber ich sehe das Objekt initialisiert werden, das Selbst wird dem Block als 'obj' übergeben und dann wird die Methode foo innerhalb des Blocks auf self durch obj definiert. – uzo
Ich bin mir ziemlich sicher, wir meinen das Gleiche. Ich schrieb "die neu erstellte Foo-Instanz", weil self innerhalb der initialize-Methode (die neu erstellte Foo-Instanz) nicht das selbe ist wie self innerhalb des Blocks und wenn man nur "self" sagt, ist unklar, welchen man meint. – sepp2k