我可以从Ruby中的必需脚本访问DATA吗?

Chr*_*ins 9 ruby

是否可以__END__在"主"脚本以外的ruby文件中访问文本?

例如:

# b.rb
B_DATA = DATA.read
__END__
bbb
Run Code Online (Sandbox Code Playgroud)

.

# a.rb
require 'b'
A_DATA = DATA.read
puts 'A_DATA: ' + A_DATA
puts 'B_DATA: ' + B_DATA
__END__
aaa
Run Code Online (Sandbox Code Playgroud)

.

C:\Temp>ruby a.rb
A_DATA:
B_DATA: aaa
Run Code Online (Sandbox Code Playgroud)

有没有办法从b.rb获得"bbb"?

Jam*_*sen 6

不幸的是,DATA加载"main"脚本时会设置全局常量.一些可能有用的事情:

可以至少获得A_DATA是正确的.只需颠倒前两个操作的顺序a.rb:

# a.rb
A_DATA = DATA.read
require 'b'
...
Run Code Online (Sandbox Code Playgroud)

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__)
Run Code Online (Sandbox Code Playgroud)