ruby – 猴子补丁vs class_eval?

前端之家收集整理的这篇文章主要介绍了ruby – 猴子补丁vs class_eval?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
class String
  def hello
    "world"
  end
end

String.class_eval {
  def world
    "hello"
  end
}

"a".world
=> "hello"
"b".hello
=> "world"

他们似乎做同样的事情 – 向现有的类添加一个方法.那有什么区别呢?

解决方法

通过class_eval,您可以做更多动态的事情:
>> met = "hello" #=> "hello"
>> String.class_eval "def #{met} ; 'hello' ; end" #=> nil
>> "foo".hello #=> "hello"

猜你在找的Ruby相关文章