- ベストアンサー
Unixのwcコマンドの簡易版ですがローカル変数はメソッドを抜けると値を忘れてしまうのでしょうか
- Unixのwcコマンドの簡易版で、ローカル変数はメソッドを抜けると値を忘れるのか疑問です。
- 質問の中で示されたコードでは、ltotalやwtotalなどの変数がメソッドの外部から呼び出されていますが、変数に入れられた値は保持されて表示されるのでしょうか。
- また、メソッドを抜けた後の値はどうやって確認できるのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
http://doc.okkez.net/static/191/doc/spec=2fvariables.html > 最初の代入はそのスコープに属するローカル変数の宣言になります。 > ローカル変数のスコープは、((*宣言した位置から*))その変数が宣言されたブロック、メソッド定義、またはクラス/モジュール定義の終りまでです とあります。 「最初の代入」は > total = 0 #行数の合計 > wtotal = 0 #単語数の合計 > ctotal = 0 #文字数の合計 です。例の場合、この外側にブロック等が無いので、ファイルの終わりがブロックの終わり=スコープの終わりです。 > l = 0 #file内の行数 > w = 0 #file内の単語数 > c = 0 #file内の文字数 これらは、eachのブロックの中で最初に代入されたので、ブロックにローカルな変数になり、ブロックの終わりのendまでがスコープで、その外では使えません。 # こういうのは「メソッドの中」とは言いません。 # メソッドの中、というの、普通は「メソッド定義の中」「メソッドの実装」を指します。 > ltotal += l > wtotal += w > ctotal += c ここのltotal,wtotak,ctotalは、ブロックの外で宣言されたltotal,wtotak,ctotalそのものです。 eachのブロックローカルなものではありません。
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
すみません。 どこが「メソッド」なのでしょう? どこが「メソッドの外部」で、どこで「メソッドから抜け」てますか? ltotalやwtotalはずっと有効なスコープのままですけど。
補足
ここでいうメソッドはeachメソッドから抜けても・・・って意味でした。
お礼
ありがとうございました。 とっても参考になりました。 メソッドの中とはメソッド定義に中のこと だったんですね・・・未熟な質問に答えて いただき本当に有難うございます。