2014-03-31 67 views
1

關於的一般問題需要在Ruby中使用
我對Ruby的要求的理解是指定的文件只加載一次,但可以多次執行。它是否正確?
我有一套Rspec測試在不同的文件中都需要相同的文件logger.rb。它看起來並不像我在所需文件中調用的方法在每個規範中執行。
以下是我在logger.rb中編寫的一些代碼,它首先清理臨時目錄然後創建一個記錄器。Ruby需要 - 多次執行

tmpdir = Dir.tmpdir 
diagnostics_directory = File.join(tmpdir, LibertyBuildpack::Diagnostics::DIAGNOSTICS_DIRECTORY) 
FileUtils.rm_rf diagnostics_directory 
raise 'Failed to create logger' if LibertyBuildpack::Diagnostics::LoggerFactory.create_logger(tmpdir).nil? 

我希望在每個規範中都會發生這種情況。 是因爲測試是在同一個模塊中,還是我誤解了需求工作。

+0

目前尚不清楚您正在執行的文件與正在加載的文件意味着什麼。 – sawa

+0

我編輯了我的問題,希望這可以讓它更清晰。 – chibi03

回答

1

仍有許多if S,因爲你不顯示的代碼需要您的文件,但我想我已經明白了一些,你有誤會的:-)

你的聲明「指定的文件只裝載一次,但可以多次執行。'基本上與事實是相反的。如果一個文件對ruby程序有任何影響,它將不得不被「執行」,它有時候可能會發生其中一個被執行的方法定義了其他方法或類。當load編輯時,文件中的所有語句都將被執行一次,但您可能會多次使用load文件。如果require文件只有load版本,如果尚未完成,那麼對於方法定義,您的「靜態」方法調用將只執行一次。

如果你想執行的事情多次就應該把load文件(通常是低效的,因爲所有的編譯將不得不再次進行),或者你require在它的方法定義(def ... end)的文件和你多次調用該方法(可能會改變參數)。後者是通常的方式,因爲編譯只需要一次完成。