0

我可以使用 Ruby (v1.9.3-p125) 读取任何文件,但无法使用以下命令:

IO.read("myself.rb")
File.open("myself.rb","rb")

在“*.rb”文件上执行此操作时,它将返回一个空白字符串。如果我将文件重命名为“myself.rabit”,它可以工作。

如何绕过对 ruby​​ 源文件的明显过滤?

4

2 回答 2

2

没有这样的过滤,您不会遇到您认为遇到的错误。

例如,这可以作为存储在.rb文件中的完整 Ruby 程序正常工作:

puts File.open(__FILE__).read
于 2012-10-29T18:06:43.687 回答
0

您已经得到正确答案:使用__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__是强制性的。
于 2012-10-29T19:17:43.590 回答