• ベストアンサー

Array.newが必要ないのはなぜですか?

以下のようなクラス拡張をしてみました。 Class String def count_word Array.new(ary) ary = self.split(/\s/) return ary.size end end ここで、Array.new()のところでエラーになってしまいます。 感覚的に配列で受け取るようにするべきだと思っていたの ですが、この1行を外すと正常に動きます。 なぜ配列を生成するのがまずいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

配列の作成は、split メソッドが行います。splitは、「文字列を分割して、それぞれの切れ端からなる配列を新たに作り出して返す」という動作のメソッドです。 その前に、ary = Array.new と配列を生成しても別にかまわないのですが、せっかく生成しても、何も使われないまま捨てられてしまいます。 Array.new(ary) は何も代入してない変数aryを参照するのでエラーです。

gurikoro
質問者

お礼

そうなんですか・・・ このタイミングで配列を生成しても捨てられてしまう んですね。String#splitが配列を生成するというのは 知りませんでした。ありがとうございました。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>Array.new(ary) これは、既にある ary から配列を作成するのでおかしいですよね。 ary は split の戻り値を受ける時に作成されるので、ary = Array.new() する必要もありません。 ついでに return self.split(/\s/).size とすれば ary も不要ですね。

gurikoro
質問者

お礼

なるほど。僕が勘違いしてるんですね。 最後の1行は、仰るような書き方の方がかっこいいですね。 ありがとうございました。

関連するQ&A