• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Unixのwcコマンドの簡易版ですが)

Unixのwcコマンドの簡易版ですがローカル変数はメソッドを抜けると値を忘れてしまうのでしょうか

このQ&Aのポイント
  • Unixのwcコマンドの簡易版で、ローカル変数はメソッドを抜けると値を忘れるのか疑問です。
  • 質問の中で示されたコードでは、ltotalやwtotalなどの変数がメソッドの外部から呼び出されていますが、変数に入れられた値は保持されて表示されるのでしょうか。
  • また、メソッドを抜けた後の値はどうやって確認できるのでしょうか。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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のブロックローカルなものではありません。

noname#208914
質問者

お礼

ありがとうございました。 とっても参考になりました。 メソッドの中とはメソッド定義に中のこと だったんですね・・・未熟な質問に答えて いただき本当に有難うございます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

すみません。 どこが「メソッド」なのでしょう? どこが「メソッドの外部」で、どこで「メソッドから抜け」てますか? ltotalやwtotalはずっと有効なスコープのままですけど。

noname#208914
質問者

補足

ここでいうメソッドはeachメソッドから抜けても・・・って意味でした。

関連するQ&A