class << Marshal
def load_with_autoload(*args)
begin
load_without_autoload(*args)
rescue [ArgumentError, NameError] => ex
msg = ex.message
if msg =~ /undefined class\/module/
mod = msg.split(' ').last
if Dependencies.load_missing_constant(self, mod.to_sym)
load(*args)
else
raise ex
end
else
raise ex
end
end
end
alias_method :load_without_autoload, :load
alias_method :load, :load_with_autoload
end
原来可以用Marshal搞定
本文介绍了一种使用 Ruby 的 Marshal 类来加载模块的方法,并通过重定义 load 方法实现了自定义的加载逻辑,当遇到未定义的类或模块时尝试动态加载。

被折叠的 条评论
为什么被折叠?



