insoul
10/10/2013 - 12:57 PM

yield vs block.call vs instance_eval(&block)

yield vs block.call vs instance_eval(&block)

class A
 def yield_block
  yield
 end
 
 def call_block(&block)
  block.call
 end
 
 def eval_block(&block)
  instance_eval(&block)
 end
end

class B
 def initialize
  @a = A.new
 end

 def yield_test
  @a.yield_block { puts self.class }
 end
 
 def call_test
  @a.call_block { puts self.class }
 end
 
 def eval_test
  @a.eval_block { puts self.class }
 end
end

b = B.new
b.yield_test #=> B
b.call_test  #=> B
b.eval_test  #=> A