【发布时间】:2017-11-03 17:24:16
【问题描述】:
我正在使用 ruby 1.8.6(不要去那里)。假设我有一个名为 results 的数组:我希望它响应一个新方法“current_page”,它只返回一个数字。
当我设置我想要的这个值时,我将它放在一个局部变量中,如下所示:
page = 3
我想修改我的数组,这样如果我调用 my_array.current_page,我会得到 3,或者我的局部变量 page 中保存的值。
最简单/最好的方法是什么?我试过这个:
@page = page
def my_array.current_page
@page
end
但是,当它被评估时,@page 可能不在身边。我需要对方法进行“硬编码”,以返回 @page 的当前值。
每个数组对象都需要能够不同,所以不能设置类方法。
我想到最好的方法可能是在 Array 类中添加一个 attr_accessor 字段,然后对其进行设置:我认为这行不通,因为 my_array 对象在我修改它的类之前已被实例化,但它似乎确实有效:
class Array; attr_accessor :current_page; end
my_array.current_page = page
my_array.current_page
=> 3
这实际上似乎有效。但这是最好的方式吗?在我的代码中间给 Array 打补丁感觉很可怕。
【问题讨论】:
-
如果你不想猴子补丁
Array,那你为什么要打电话给Array#current_page呢?你不能定义一些包装对象来包含你的原始数组吗? -
最好的方法是像@TomLord 提到的那样创建一个包装器。这将允许您将分页问题与本机 Array 分开,并在复杂性扩大时提供更大的灵活性