我可以使用 Ruby (v1.9.3-p125) 读取任何文件,但无法使用以下命令:
IO.read("myself.rb")
File.open("myself.rb","rb")
在“*.rb”文件上执行此操作时,它将返回一个空白字符串。如果我将文件重命名为“myself.rabit”,它可以工作。
如何绕过对 ruby 源文件的明显过滤?
没有这样的过滤,您不会遇到您认为遇到的错误。
例如,这可以作为存储在.rb
文件中的完整 Ruby 程序正常工作:
puts File.open(__FILE__).read
您已经得到正确答案:使用__FILE__
.
当您想读取主文件时,还有另一种可能性。
请参阅以下代码:
p DATA
p DATA.pos
p DATA.read
__END__
This is text after __END__
当你执行它时,你会得到
#<File:test.rb>
50
"This is text after __END__"
DATA
是一个文件句柄,位于脚本 ( __END__
) 的结尾之后 - 在我的示例中它是位置 50。
我经常使用它DATA
来将数据存储在一种“here-document”中。
您可以使用这种可能性,只需将位置设置为文件开头。
DATA.pos= 0
puts DATA.read
两个限制:
__END__
是强制性的。