首页 > 解决方案 > Monkeypatch 数组并将数组元素设置为新值

问题描述

我正在为 Array 编写一个新方法,即

class Array

  def my_new_method!
     ...
     other_array = ....
     # Want to set self to other_array. How?

  end

end

正如评论所示,我在Array#my_new_method!一个新数组内进行计算other_array(在我的情况下,它恰好具有与相同数量的元素self),并且我想将 Array 的所有元素设置selfother_array. 当然我可以做一个

other_array.each_with_index |element, i|
  self[i] = element
end

但也许有更简单的方法?我查找了这些方法map!fill这些方法似乎朝着相似的方向发展,但看不到如何在我的案例中合理地应用它们。

例如,如果我有

a=[2,6,4]

我做了一个

a.my_new_method!

在里面my_new_method!other_array结果是[1,2,3],我希望a也是[1,2,3]。这个例子看起来有点做作,因为 ifmy_new_method!不会是 Array 的实例方法,而是一些外部 Method,

a = my_new_method(a)

会做的工作。就我而言,这无济于事,因为我无法做到

self = other_array

里面my_new_method!

标签: ruby

解决方案


您可以调用replace以将数组的内容替换为另一个数组的内容:

class Array
  def my_new_method!
    other = [1, 2, 3]
    replace(other)
  end
end

a = [:foo, :bar, :baz]
a.my_new_method!
a #=> [1, 2, 3]

推荐阅读