title: Return statements inside procs, lambdas, and blocks
body: <p>I am having a lot of trouble understanding how <code>return</code> works in blocks, procs, and lambdas.  </p>
  
  <p>For instance, in the following case, why does <code>batman_ironman_proc</code> work, while <code>batman_yield</code> throw an error?</p>
  
  <pre><code>def batman_ironman_proc
    victor = Proc.new { return "Batman will win!" }
    victor.call
    "Iron Man will win!"
  end
  
  def batman_yield
      yield
      "Iron man will win!"
  end
  
  victor = Proc.new { return "Batman will win!" }
  
  puts batman_ironman_proc 
  #batman_yield(&amp;victor) === This code throws an error.
  </code></pre>