`__FILE__`在`DATA` /`__ END__`中不起作用

时间:2016-02-29 01:06:11

标签: ruby

我正在Practicing Ruby's Self-Guided Course on Stream, File Formats, and Sockets工作,并在pre-built test for the first exercise中遇到了以下问题。以下测试脚本应该将目录更改为项目文件夹的data子目录:

eval(DATA.read) # load the test helper script
...             # various calls to test method defined below
__END__

dir = File.dirname(__FILE__)
Dir.chdir("#{dir}/data")
...

但是这会中断,因为__FILE__会返回(eval)(而不是文件的路径)而File.dirname(__FILE__)会返回.为什么会发生这种情况,应该怎么写?而是产生预期的输出?

1 个答案:

答案 0 :(得分:2)

__END__DATA在这里并不相关。您只需将字符串传递给Kernel#eval即可。例如,简单的eval('__FILE__')也会返回"(eval)",因为它是默认的文件名。它可以通过传递另一个字符串来改变,但作为第三个参数:

eval('__FILE__', nil, 'hello.rb')  # => "hello.rb"

或者在你的情况下:

eval(DATA.read, nil, __FILE__)