Fooをinstance_evalで定義すると、違いはありますか。 。 。'yield self'はinstance_evalと同じですか?
class Foo
def initialize(&block)
instance_eval(&block) if block_given?
end
end
。 。 。あるいは「降伏自己」で:だから「yield self
」
x = Foo.new { def foo; 'foo'; end }
x.foo
Foo.new後のブロックは常にのコンテキストで評価されることを意味します
class Foo
def initialize
yield self if block_given?
end
end
どちらの場合も、あなたはこれを行うことができますFooクラス。
これは間違いありませんか?
あなたの "Edit to clarify"では、ブロック内のobjに自己が与えられたということではありませんか?たぶん私は別の方法でそれを読んでいるだけですが、私はオブジェクトが初期化されているのを見て、自己は 'obj'としてブロックに与えられ、ブロックの中でメソッドfooはobjを通してselfに定義されます。 – uzo
私は確かに同じことを意味します。私は "新しく作成されたFooインスタンス"を書きました。なぜなら、initializeメソッド(新しく作成されたFooインスタンス)内のselfはブロック内のselfと同じではなく、単に "self"と言うと、どちらが意味するのか不明です。 – sepp2k