如何在Ruby中的Array类中对数组的每个元素进行平方?

我的部分代码如下:

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} 

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

你必须使用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]