title: Is 'yield self' the same as instance_eval?
body: <p><strong>Is there any difference if you define Foo with instance_eval: . . .</strong></p>
  
  <pre><code>class Foo
      def initialize(&amp;block)
        instance_eval(&amp;block) if block_given?
      end
    end
  </code></pre>
  
  <p><strong>. . . or with 'yield self':</strong></p>
  
  <pre><code>class Foo
    def initialize
      yield self if block_given?
    end
  end
  </code></pre>
  
  <p>In either case you can do this:</p>
  
  <pre><code>x = Foo.new { def foo; 'foo'; end }
  x.foo 
  </code></pre>
  
  <p>So '<code>yield self</code>' means that the block after Foo.new is always evaluated in the context of the Foo class.</p>
  
  <p>Is this correct?</p>