我使用这个红宝石招用__END__
,并DATA
把我的程序文件里面的一些数据:
class Foo
def initialize()
puts DATA.read.inspect
end
end
puts DATA.read.inspect
Foo.new
__END__
test
Run Code Online (Sandbox Code Playgroud)
这会生成以下输出:
"test"
""
Run Code Online (Sandbox Code Playgroud)
我假设DATA
全局都是一样的,但在课堂上它没有内容.如何__END__
在课堂内访问数据(除了使用全局变量的明显和丑陋的解决方案)?
补充:我看到DATA
第二次阅读两次没有给我什么.我可以使用rewind
回到开始,但read
然后给我我的程序的完整源代码.__END__
在后续使用之后是否有更简单的方法来获取该部分DATA
,或者我是否会更好地阅读它并将其存储在其他地方以备将来使用?
sep*_*p2k 22
数据是一样的.如果不是做Foo.new,你会得到相同的输出,你会第二次做DATA.read.
这是因为在第一次读取DATA
(这是一个IO)到达流的末尾之后,所以任何进一步的读取都将返回一个空字符串,除非您将附加数据附加到DATA或重绕到DATA
流的开头.
编辑:在执行任何__END__
读取DATA.pos
之前,在您必须阅读之后立即寻找该点DATA
,然后pos
在读取后恢复到该值.最简单的解决方案可能只是FOO = DATA.read
在脚本开头然后使用FOO
.