title: monkey patching vs class_eval?
body: <pre><code>class String
    def hello
      "world"
    end
  end
  
  String.class_eval {
    def world
      "hello"
    end
  }
  
  "a".world
  =&gt; "hello"
  "b".hello
  =&gt; "world"
  </code></pre>
  
  <p>They seems to do the same thing -- adding a method to a existing class. So what's the difference?</p>