DATA -> File
[permalink][rdoc]スクリプトの __END__ プログラムの終り以降をアクセスする File オブジェクト。
ソースファイルの __END__ 以降は解析・実行の対象にならないのでその部分にプログラムが利用するためのデータを書き込んでおくことができます。 DATA 定数はそのデータ部分にアクセスするための File オブジェクトを保持しています。
__END__ を含まないプログラムにおいては DATA は定義されません。
print DATA.gets # => 故人西辞黄鶴楼 print DATA.gets # => 烟花三月下揚州 print DATA.gets # => 孤帆遠影碧空尽 print DATA.gets # => 唯見長江天際流 DATA.gets # => nil __END__ 故人西辞黄鶴楼 烟花三月下揚州 孤帆遠影碧空尽 唯見長江天際流
sum = 0 DATA.each_line do |line| sum += line.to_i end DATA.rewind p DATA.gets # => "sum = 0¥n" __END__ 17 19 23 29 31
DATA.gets # => uninitialized constant DATA (NameError)
ファイル library.rb と app.rb の内容が以下であったとします。
library.rb:
print DATA.gets __END__ data from library
app.rb:
require 'library.rb' __END__ data from app
このときシェルから次を実行すると
$ ruby app.rb
結果は以下のように出力されます。
data from app