- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Ruby while line = DATA.gets と DATA.each do |line| の違い)
Rubyのwhile line = DATA.getsとDATA.each do |line|の違い | プログラムの理屈と変数codeの有効化方法
このQ&Aのポイント
- Rubyのwhile line = DATA.getsとDATA.each do |line|の違いを解説します。
- while line = DATA.getsを使用すると、値が正常に出力されますが、DATA.each do |line|では変数codeの値が出力されません。
- DATA.each do |line|の書式で変数codeを有効にする方法はありますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
eachはスコープを生成するので、 code=$1はeachブロック内のローカル変数と見なされます。 そのため、code=$1を通らないときはcodeに対する代入が行われていないと見なされ、 code==nilとなります。 Rubyリファレンスマニュアル - trap::スコープ、制御構造 http://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3A%A5%B9%A5%B3%A1%BC%A5%D7%A1%A2%C0%A9%B8%E6%B9%BD%C2%A4 より引用 | 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/ruby/ruby-list/8472?8393-8678
お礼
ありがとうございます。理解できました。