如何为Ruby编写猴子补丁?

时间:2010-11-13 23:32:25

标签: ruby monkeypatching

我正在使用Rails 3并收到如下错误:

undefined method `persisted?' for []:Array

我想monkeypatch来解决这个问题。首先:它应该是什么样的?我对Ruby的源代码中的Array类的嵌套知之甚少。我很感激这个指导。

2 个答案:

答案 0 :(得分:7)

基本上你只需编写类和函数就像你对任何其他类一样,并将它添加到原始类定义中。

喜欢如此:

class Array
    def persisted?
        # Does it persist?
    end
end

答案 1 :(得分:3)

Monkey-patching看起来像这样:

# patches/array.rb
class Array # Array is a top-level class
  def persisted?
    false # or your own implementation
  end
end

# some/other/script.rb
require 'path/to/patches/array.rb'
my_array = [1, 2, 3]
puts my_array.persisted?

现在:通过询问Array实例是否持久化,你可能意味着什么?