結論
- Ruby で
__END__
と書くと、それ以降のコードはプログラムではなくデータとして読み込まれる - そのデータは、DATA という定数を使ってアクセスできる
__END__
と DATA はセットで使われることが多い
例1
puts DATA __END__ いいハンターってやつは、動物に好かれちまうんだ。
__END__
のあとの某マンガの有名なセリフを、DATAが受け取る。puts で表示すると、つぎのように表示される。
$ ruby end.rb #<File:0x00007fb7fe141078>
ファイルオブジェクトが表示されている。某マンガの有名なセリフを取得したい場合は、gets
メソッドを使う。
puts DATA.gets __END__ いいハンターってやつは、動物に好かれちまうんだ。
結果
$ ruby end.rb いいハンターってやつは、動物に好かれちまうんだ。
文字列を取得できた。
例2
次に、ループで表示してみる。
DATA.each do |line| puts line end __END__ この年で挑戦者か。血沸く血沸く♪ おそろしく速い手刀。オレでなきゃ見逃しちゃうね。 そりゃ悪手だろ。蟻んコ
例のごとく、某マンガの有名なセリフたちが並んでいる。これをeach
メソッドでputs
していくと・・・
$ ruby end.rb この年で挑戦者か。血沸く血沸く♪ おそろしく速い手刀。オレでなきゃ見逃しちゃうね。 そりゃ悪手だろ。蟻んコ
セリフたちが表示される。
ちなみに、データなので改行も取得する。
DATA.each do |line| puts line end __END__ この年で挑戦者か。血沸く血沸く♪ おそろしく速い手刀。オレでなきゃ見逃しちゃうね。 そりゃ悪手だろ。蟻んコ
改行されている↓
$ ruby end.rb この年で挑戦者か。血沸く血沸く♪ おそろしく速い手刀。オレでなきゃ見逃しちゃうね。 そりゃ悪手だろ。蟻んコ