2014-03-31 68 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)的文件和你多次调用该方法(可能会改变参数)。后者是通常的方式,因为编译只需要一次完成。