Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Objectクラス > DATA (private)
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