К сожалению, глобальная константа DATA
устанавливается при загрузке «основного» скрипта. Несколько вещей, которые могут помочь:
Вы можете по крайней мере получить A_DATA
, чтобы быть правильным. Просто измените порядок первых двух операций в a.rb
:
# a.rb
A_DATA = DATA.read
require 'b'
...
Вы можете получить B_DATA
, чтобы быть правильным, если вы пройдете немного ригамароле:
# load_data_regardless_of_main_script.rb
module LoadDataRegardlessOfMainScript
def self.from(file)
# the performance of this function could be
# greatly improved by using a StringIO buffer
# and only appending to it after seeing __END__.
File.read(file).sub(/\A.*\n__END__\n/m, '')
end
end
# b.rb:
require 'load_data_regardless_of_main_script'
B_DATA = LoadDataRegardlessOfMainScript.from(__FILE__)