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

时间:2013-05-23 20:33:13

标签: arrays ruby perfect-square

我的部分代码如下:

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}

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

1 个答案:

答案 0 :(得分:11)

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