2016-02-29 46 views
-1

我正在使用Practicing Ruby's Self-Guided Course on Stream, File Formats, and Sockets,並在pre-built test for the first exercise中遇到以下問題。下面的測試腳本應該在目錄更改爲data子目錄中的項目文件夾:`__FILE__`不能在`DATA` /`__END__`中工作

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__)回報.這是怎麼回事,而如何編寫它來產生預期的輸出呢?

+0

希望我的問題是,現在更清晰 –

回答

2

__END__DATA這裏沒有真正的相關性。你只是將一個字符串傳遞給Kernel#eval。例如,簡單的eval('__FILE__')也會返回"(eval)",因爲這是默認的文件名。它可以通過傳遞另外一個字符串但作爲第三個參數進行更改:

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

或者你的情況:

eval(DATA.read, nil, __FILE__) 
+0

很精闢!謝謝。 –

相關問題