• ベストアンサー
※ 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を有効にする方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.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

kingfruits
質問者

お礼

ありがとうございます。理解できました。

関連するQ&A

専門家に質問してみよう