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ランキング
-
ビーリアルのユーザー名を変え...
-
pandasでsqlite3にテーブル作成...
-
100万件越えCSVから条件を満た...
-
教えてください
-
1、Rstudioで回帰直線を求める...
-
パソコンのスクリーンセーバー...
-
プログラミング
-
(再質問)エクセルのマクロボ...
-
パイソンエラーについて
-
pythonエラー
-
GitHubについて
-
ぱいソン
-
パイソンのクラスについて
-
初心者プログラミング
-
パイソンのクラスのブログラム
-
7セグメント LED ディスプレイ ...
-
こういう問題分をよんだとき
-
クリスタルレポートで困ってい...
-
プログラミングについてです。...
-
power BI クエリエディター 〇...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ぱいソン
-
【BrowseForFolderでデスクトッ...
-
Rubyの超初心者です。「戻り値r...
-
Unixのwcコマンドの簡易版ですが
-
ブロックつきメソッドやyield文...
-
x.divmod(y)
-
ruby 毎回同じ様なreplace文を...
-
ジェネレーターとはなんですか?
-
python return 関数
-
rails の form_forについて
-
レコードセットオブジェクトの...
-
Rubyのクラス
-
VBA ブックに名前をつけて保存
-
【引数と戻り値の違い】 はじめ...
-
【Ruby】 文法的に何が悪いの...
-
rubyでメソッド内で引数名、値...
-
CloseとQuitについて
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
「arg」は何の略?
おすすめ情報