首页 > 解决方案 > 有没有办法在rails控制台中修改数组类?

问题描述

是否可以从 Rails 控制台猴子修补数组类?当我尝试运行以下代码时,我收到此错误。

class Array
  def push(obj)
    return
  end
end

我收到以下错误

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

标签: ruby-on-railsruby

解决方案


看起来 Rails 控制台本身中的某些东西正在使用Array#push并且一旦你定义了它就会使用你的猴子补丁版本。

的标准版本push被定义为接受传递给它的尽可能多的参数,但是您的替换版本只接受一个参数,obj因此不兼容。

这会导致wrong number of arguments (given 5, expected 1)您提到的错误。

要替换push为兼容版本,您可以使用 Ruby 的*“splat”运算符)定义一个可以接受任意数量参数的方法:

def push(*obj)
  # implementation here
end

用一个只返回而不做任何事情的方法替换push可能会导致很多问题。也许用更多关于你想要做什么的细节来更新这个问题。


推荐阅读