- ベストアンサー
Array.newが必要ないのはなぜですか?
以下のようなクラス拡張をしてみました。 Class String def count_word Array.new(ary) ary = self.split(/\s/) return ary.size end end ここで、Array.new()のところでエラーになってしまいます。 感覚的に配列で受け取るようにするべきだと思っていたの ですが、この1行を外すと正常に動きます。 なぜ配列を生成するのがまずいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
配列の作成は、split メソッドが行います。splitは、「文字列を分割して、それぞれの切れ端からなる配列を新たに作り出して返す」という動作のメソッドです。 その前に、ary = Array.new と配列を生成しても別にかまわないのですが、せっかく生成しても、何も使われないまま捨てられてしまいます。 Array.new(ary) は何も代入してない変数aryを参照するのでエラーです。
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
回答No.1
>Array.new(ary) これは、既にある ary から配列を作成するのでおかしいですよね。 ary は split の戻り値を受ける時に作成されるので、ary = Array.new() する必要もありません。 ついでに return self.split(/\s/).size とすれば ary も不要ですね。
質問者
お礼
なるほど。僕が勘違いしてるんですね。 最後の1行は、仰るような書き方の方がかっこいいですね。 ありがとうございました。
お礼
そうなんですか・・・ このタイミングで配列を生成しても捨てられてしまう んですね。String#splitが配列を生成するというのは 知りませんでした。ありがとうございました。