Ruby需要 - 执行多次

时间:2014-03-31 08:55:44

标签: ruby rspec require

Ruby中关于要求的一般性问题 我对Ruby的要求的理解是指定的文件只加载一次但可以多次执行。这是对的吗? 我在不同的文件中有一组Rspec测试,它们都需要相同的文件logger.rb。看起来我在所需文件中调用的方法似乎并不是在每个规范中执行。
这是我在logger.rb中编写的一些代码,它首先清理临时目录,然后创建一个记录器。

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?

我希望每个规格都能实现这一点。 这是因为测试是在同一模块内,还是我误解了需要如何工作。

1 个答案:

答案 0 :(得分:2)

还有很多if,因为你没有显示需要你文件的代码,但我想我已经理解了你的一些误解: - )

您的陈述'指定的文件只加载一次,但可以多次执行。'基本上与事实相反。如果文件要对ruby程序产生任何影响,则必须执行它,有时可能会发生一个已执行的方法定义其他方法或类。文件中的所有语句将在load时执行一次,但您可以多次load一个文件。如果你require一个文件,那么只有load文件才会被load编辑,因为方法定义你的静态'方法调用只会执行一次。

如果你想多次执行事情,你应该require文件(这通常是低效的,因为所有的编译都必须再次完成)或者def ... end一个带有方法定义的文件在它({{1}})中你多次调用该方法(可能有不同的参数)。后者是通常的方式,因为编译只需要以这种方式进行。