1. ホーム
  2. arrays

[解決済み] RubyのArrayクラスで配列の各要素を2乗する方法は?

2022-02-15 11:56:27

質問

私のコードの一部は以下の通りです。

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の各要素に対して、与えられたブロックを1回ずつ呼び出します。ブロックが返す値を含む新しい配列を作成します。

Array#map! -> selfの各要素に対して、与えられたブロックを1回ずつ起動し、要素をブロックが返す値で置き換えます。

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

[1,2,3].square! #=> [1, 4, 9]