10

我的部分代码如下:

class Array
  def square!
    self.map {|num| num ** 2}
    self
  end
end

当我打电话时:

[1,2,3].square!

我希望得到 [1,4,9],但我得到 [1,2,3]。为什么会这样?当我打电话时:

[1,2,3].map {|num| num ** 2}

在类方法之外,我得到了正确的答案。

4

1 回答 1

17

你必须使用Array#map!,而不是Array#map

Array#map->为 self 的每个元素调用一次给定块。创建一个包含块返回值的新数组。

Array#map!->为 self 的每个元素调用一次给定块,将元素替换为块返回的值。

class Array
  def square!
    self.map! {|num| num ** 2}
  end
end

[1,2,3].square! #=> [1, 4, 9]
于 2013-05-23T20:34:30.323 回答