Как написать патч для обезьяны для Ruby? - PullRequest
1 голос
/ 14 ноября 2010

Я использую Rails 3 и получаю сообщение об ошибке, похожее на это:

undefined method `persisted?' for []:Array

Я хочу установить monkeypatch для решения этой проблемы. Прежде всего: как это должно выглядеть? Я очень мало знаю о вложенности класса Array в исходный код Ruby. Буду признателен за руководство.

Ответы [ 2 ]

7 голосов
/ 14 ноября 2010

По сути, вы просто пишете класс и функцию так же, как и для любого другого класса, и это добавляется к исходному определению класса.

Как и так:

class Array
    def persisted?
        # Does it persist?
    end
end
3 голосов
/ 14 ноября 2010

Обезьяна-патчинг выглядит так:

# 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, сохраняется ли он?

...