我有一个第三方Ruby文件,在启动时执行一些初始化。该文件位于config/initializers
, Rails Magic 为required
(虽然我使用的是Rails,但这是一个通用的Ruby问题)。
我想推迟第三方文件的执行,以便我可以在程序控制,按需和可能多次执行时执行它。
我已将文件移出初始化程序区域,因此Rails不会自动加载它。然后我定义了一个这样的方法:
def initialize_thing
require 'path/to/initializer'
end
我希望的效果是文件的内容成为方法的主体,但这不会发生。相反,当在第一次调用方法时执行require时,将执行文件的争用。
我不能修改文件,因为它是由第三方提供的。
我正在寻找的效果就像我只是将第三方文件的conent直接粘贴到我的方法定义中一样,这样它的内容就不会被执行,直到调用该方法时才执行。< / p>
是否有Ruby方法只将一个文件的内容包含在另一个文件而不执行它?
答案 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