
DATA.each do |line|
if /code,(.+)/=~line
code=$1
elsif /name,(.+)/=~line
puts "code=#{code} name=#{$1}"
end
end
__END__
code,001
name,ipp
code,002
name,opp
上記実行結果は以下の様に変数codeの値が出力されません。
code= name=ipp
code= name=opp
ところがプログラムの一行目をwhile line = DATA.getsに変更すると、以下の様に値が出力されます。
code=001 name=ipp
code=002 name=opp
どういう理屈なんでしょうか? 教えていただけませんか?
また、DATA.each do |line|の書式で、変数code(DATAの一行前で代入した値)を有効にする方法はあるのでしょうか?
No.1ベストアンサー
- 回答日時:
eachはスコープを生成するので、
code=$1はeachブロック内のローカル変数と見なされます。
そのため、code=$1を通らないときはcodeに対する代入が行われていないと見なされ、
code==nilとなります。
Rubyリファレンスマニュアル - trap::スコープ、制御構造
http://www.ruby-lang.org/ja/man/?cmd=view;name=t …
より引用
| while や for がスコープを作らないのに対し、loop や each などのイテレータはスコープを作ります。
> DATA.each do |line|の書式で、変数code(DATAの一行前で代入した値)を有効にする方法はあるのでしょうか?
----
code=""
DATA.each do |line|
#後略
----
のように、あらかじめ変数codeを宣言(代入)しておけばよいです。
[参考]
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/r …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
pythonでのローカルファイルか...
-
vba 正規表現について教えてく...
-
if関数とは?
-
プログラミングに興味があるの...
-
uwscでPauseキーが押されたら、...
-
Fortranでシステム時刻をカレン...
-
数行削除してコピーするbatファ...
-
秀丸エディターでの置き換え
-
vba クリップボードクリアにつ...
-
Geminiフォーム 画像生成で 人...
-
Python 3.12.2 か一番最新のパ...
-
AIがプログラムする時代のプロ...
-
pythonについて(初心者です)
-
pythonでhtmlファイルの指定文...
-
プログラム上での行のマージ方法
-
覚えることが少ないプログラミ...
-
従業員が1名だけのSierっている...
-
アルゴリズムとコードとは何で...
-
IT業で開発をされてる方々に質...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
VB.NETのテキストボック...
-
テキストボックスからフォーカ...
-
mailの送信音がしなくなったの...
-
VB.NET でのLaod/unLoad につ...
-
C++の例外処理
-
NumericUpDownの数値を選択済み...
-
項目数は英語で
-
CD-RWメディアにマジックで書い...
-
Javascript経由でPHPのコントロ...
-
「::演算子」の読み方を教えて...
-
フォームを開く時のイベント処理
-
ヒント表示について
-
コンピュータ言語paythonのエデ...
-
vba メモリーリーク
-
絵画(近代以前)に出てくる美人
-
シリアル通信について
-
【C#】 複数行GcTextBoxのフォ...
-
jscriptの質問
おすすめ情報