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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- PHP $_SESSIONについて教えて下さい。 4 2023/03/13 13:45
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
ヒント表示について
-
『μg』の読み方と意味。
-
VB.NET でのLaod/unLoad につ...
-
【C#】 複数行GcTextBoxのフォ...
-
エアー漏れの流量の計算式を教...
-
テキストボックスからフォーカ...
-
vba メモリーリーク
-
NumericUpDownの数値を選択済み...
-
pcクラッシュの直し方ありますか?
-
地域別に広告スペースの表示を...
-
C++の例外処理
-
携帯電話のマイクロSDカードに...
-
hDC=::GetDC(m_hWnd)とhDC=GetD...
-
mailの送信音がしなくなったの...
-
word
-
capcutってアプリで質問です。 ...
-
PDFファイルで画像化された文書...
-
illustratorとExcelは連携出来...
-
数式中の文字をCambria Math以...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
名古屋の栄と錦は治安悪い?
-
『μg』の読み方と意味。
-
NumericUpDownの数値を選択済み...
-
VB.NET でのLaod/unLoad につ...
-
フォームを開く時のイベント処理
-
VB.NETのテキストボック...
-
テキストボックスからフォーカ...
-
一部の文字のみ文字化けします
-
項目数は英語で
-
エアー漏れの流量の計算式を教...
-
コンピュータ言語paythonのエデ...
-
vba メモリーリーク
-
ヒント表示について
-
C#での変数スコープ?
-
C++の例外処理
-
受け取った値が"undefined"と表...
-
シリアルフラッシュメモリをな...
-
globalと$GLOBALSの違いは?
-
ブック開いたときのフォーカス指定
-
宮迫のフライデー、誰がリーク...
おすすめ情報