扩展数组隐藏初始值设定项?
问题描述:
我使用Ruby 1.8.7扩展数组隐藏初始值设定项?
my_array = Array.new(5, "A")
工作正常。但是如果我扩展Array类是这样的:
class Array
def my_function
self
end
end
则初始化不再工作,并返回
wrong number of arguments (2 for 0)
这是为什么?如何解决?
答
你在做Module
吗?如果是这样,那么您正在定义一个单独的Array
类,而不是从标准库扩展Array
。
确保您的扩展是在顶层,要不写:
class ::Array
(顺便说一下,有没有你为什么要使用Ruby 1.8.7如果没有,我会一个很好的理由?推荐使用最新版本 - Ruby已经改进了多年。)
我继承了这个非常糟糕的设计和实现的rails项目(2.3.5)并升级了任何导致事情崩溃的东西。 数组扩展在模型类中定义。使用:: Array将其推入全局作用域,然后扩展方法停止工作。 该方法使用像这样:MyActiveRecord.find(条件).my_function – batkuip 2012-07-26 00:03:03
我很确定“find”返回一个数组。那么为什么这不起作用呢?错误信息是“参数的错误数目(1代表0)” – batkuip 2012-07-26 00:11:10
啊!不,我不认为'ActiveRecord :: Base.find'返回一个数组。在Rails控制台中尝试'Model.find(criteria).class'来检查。无论返回的类是什么,定义你的扩展方法。确保你没有定义一个单独的类。 – 2012-07-26 03:34:13