Есть ли способ обезжиривать патч класса в консоли rails? - PullRequest
0 голосов
/ 04 сентября 2018

Можно ли обезопасить класс массива патчей с консоли rails? Когда я пытаюсь запустить следующий код, я получаю эту ошибку.

class Array
  def push(obj)
    return
  end
end

Я получаю следующую ошибку

ArgumentError: wrong number of arguments (given 5, expected 1)
from (pry):2:in `push'

1 Ответ

0 голосов
/ 04 сентября 2018

Похоже, что что-то в самой консоли Rails использует Array#push и будет использовать вашу исправленную версию с обезьяной, как только вы определите это.

Стандартная версия push определена так, чтобы принимать столько аргументов, сколько ей передано, однако ваша замещающая версия принимает только один параметр, obj и поэтому не совместима.

Это приводит к упомянутой вами ошибке wrong number of arguments (given 5, expected 1).

Чтобы заменить push на совместимую версию, вы должны использовать * ( оператор "splat") Ruby для определения метода, который может принимать любое количество аргументов:

def push(*obj)
  # implementation here
end

Замена push методом, который просто возвращает ничего не делая, вероятно, вызовет немало проблем. Возможно, уточните вопрос с некоторыми подробностями о том, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...