我可以要求一个ruby文件,以便它成为一种方法吗?

时间:2015-09-20 14:08:24

标签: ruby require

我有一个第三方Ruby文件,在启动时执行一些初始化。该文件位于config/initializers Rails Magic required(虽然我使用的是Rails,但这是一个通用的Ruby问题)。

我想推迟第三方文件的执行,以便我可以在程序控制,按需和可能多次执行时执行它。

我已将文件移出初始化程序区域,因此Rails不会自动加载它。然后我定义了一个这样的方法:

def initialize_thing
  require 'path/to/initializer'
end

我希望的效果是文件的内容成为方法的主体,但这不会发生。相反,当在第一次调用方法时执行require时,将执行文件的争用。

我不能修改文件,因为它是由第三方提供的。

我正在寻找的效果就像我只是将第三方文件的conent直接粘贴到我的方法定义中一样,这样它的内容就不会被执行,直到调用该方法时才执行。< / p>

是否有Ruby方法只将一个文件的内容包含在另一个文件而不执行它?

2 个答案:

答案 0 :(得分:0)

  

是否有Ruby方法只将一个文件的内容包含在另一个文件而不执行它?

加载文件内容并将其评估为Ruby的require是什么。如果您需要的是只读取文件而不进行评估,那么只需使用File.read

相反,如果您想要在某个时刻需要文件,那么将require放在方法中并调用该方法就可以了。

# a.rb
puts "Second"

# b.rb
def execute!
  require_relative 'a'
end
puts "First"
execute!

# ruby b.rb
First
Second

如果它不起作用,则意味着在您执行此操作之前系统中需要该文件。

老实说,这对我来说似乎是一种黑客攻击。加载文件的顺序不应该相关。

答案 1 :(得分:0)

require只会在您第一次调用文件时读取和评估文件 - 如果您想要在每次需要使用load时阅读和评估该文件。见http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-load