![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
ltotal = 0 #行数の合計
wtotal = 0 #単語数の合計
ctotal = 0 #文字数の合計
ARGV.each do |file|
begin
input = open(file) #ファイルを開く(A)
l = 0 #file内の行数
w = 0 #file内の単語数
c = 0 #file内の文字数
while line = input.gets
l += 1
c += line.size
line.sub!(/^\s+/) #行頭の空白を削除
ary = line.split(/\s+/) #空白文字で分解
w += ary.size
end
input.close #ファイルを閉じる
printf("%8d %8d %8d %s\n", l, w, c, file) #出力を整形する
ltotal += l
wtotal += w
ctotal += c
rescue => ex
print ex.message, "\n" #例外メッセージを出力(B)
end
end
printf("%8d %8d %8d %s\n", ltotal, wtotal, ctotal, "total")
ローカル変数はメソッドを抜けると値を忘れてしまうのでは
なかったでしょうか・・・
ここでltotalやwtotal等を呼び出しているのは明らかに
メソッドの外部からだと思うのですが、変数に入れられた
値は保持されたまま表示されるのでしょうか
No.2ベストアンサー
- 回答日時:
> 最初の代入はそのスコープに属するローカル変数の宣言になります。
> ローカル変数のスコープは、((*宣言した位置から*))その変数が宣言されたブロック、メソッド定義、またはクラス/モジュール定義の終りまでです
とあります。
「最初の代入」は
> 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のブロックローカルなものではありません。
ありがとうございました。
とっても参考になりました。
メソッドの中とはメソッド定義に中のこと
だったんですね・・・未熟な質問に答えて
いただき本当に有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
(再質問)エクセルのマクロボ...
-
エクセル 連続保存マクロ
-
Beautiful Soupのインストール...
-
ビーリアルのユーザー名を変え...
-
pandasでsqlite3にテーブル作成...
-
Ruby on railsをrails sで立ち...
-
ファイルの切り出しプログラム...
-
GitHubについて
-
Rubyのみでスレがあってそこに...
-
IDLE.Shell 3.10.0
-
プログラミング初学者の勉強方法
-
NCルータープログラム学習方法
-
特定のセルの文字数を数え、奇...
-
C言語の入力した文字を反転させ...
-
未経験者がwebサービスを開発す...
-
void lcd_str(unsigned char* p...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Rubyの超初心者です。「戻り値r...
-
【BrowseForFolderでデスクトッ...
-
python return 関数
-
【引数と戻り値の違い】 はじめ...
-
CloseとQuitについて
-
再帰に関する質問です。
-
ブロックつきメソッドやyield文...
-
railsチュートリアル5章の演習
-
【Ruby】 文法的に何が悪いの...
-
rubyでのproc
-
ぱいソン
-
Rubyにインクリメンタル演算子...
-
ジェネレーターとはなんですか?
-
railsでアプリケーションコント...
-
ハッシュ(単語数を数える) た...
-
Ruby Fileクラスについて
-
レコードセットオブジェクトの...
-
timesの使いどころ
-
Unixのwcコマンドの簡易版ですが
-
自作したメソッド・・・こんな...
おすすめ情報