Monkeypatch数组并将数组元素设置为新值

时间:2019-12-12 10:57:30

标签: ruby

我正在为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(在我的情况下,它恰好具有与{{1} }),我想将self表示的Array的所有元素设置为self中的相应元素。我当然可以做

other_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!会变成[1,2,3],我希望a也是[1,2,3]。这个示例看起来有些虚假,因为如果other_array不是Array的实例方法,而是某个外部方法

my_new_method!

会做这份工作。就我而言,这无济于事,因为我不能做

a = my_new_method(a)

self = other_array 内部。

1 个答案:

答案 0 :(得分:3)

您可以调用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]