Part of my code is as follows:
class Array
def square!
self.map {|num| num ** 2}
self
end
end
When I call:
[1,2,3].square!
I expect to get [1,4,9], but instead I get [1,2,3]. Why is this the case? When I call:
[1,2,3].map {|num| num ** 2}
outside of the class method, I get the correct answer.
You have to use Array#map!
, not Array#map
.
Array#map
-> Invokes the given block once for each element of self.Creates a new array containing the values returned by the block.
Array#map!
-> Invokes the given block once for each element of self, replacing the element with the value returned by the block.
class Array
def square!
self.map! {|num| num ** 2}
end
end
[1,2,3].square! #=> [1, 4, 9]
来源:https://stackoverflow.com/questions/16723386/how-to-square-each-element-of-an-array-in-array-class-in-ruby