在不制动的情况下重载 Kernel.require()
Overloading Kernel.require() without braking it
我正在尝试重载 Kernel.require()
方法以获取构建代码依赖树所需的数据。这就是我简单想象的新 require 方法:
def require arg
super arg
puts "including '#{arg}' in '#{caller_locations(1).first.path}'"
end
不幸的是,我发现这会阻止代码中其他地方的 require()
调用,从而导致一系列错误。
Kernel#require
returns true
或 false
的原始实现。您的新 require
方法不再 return 该值,而是始终 returns nil
(来自 p
方法的响应)。
我可以想象,在某些情况下,在代码中设置条件并根据 require
的响应定义常量是有意义的。
您可以通过交换方法中的行来解决问题:
def require(name)
puts "requiring '#{name}' in '#{caller_locations(1).first.path}'"
super
end
我正在尝试重载 Kernel.require()
方法以获取构建代码依赖树所需的数据。这就是我简单想象的新 require 方法:
def require arg
super arg
puts "including '#{arg}' in '#{caller_locations(1).first.path}'"
end
不幸的是,我发现这会阻止代码中其他地方的 require()
调用,从而导致一系列错误。
Kernel#require
returns true
或 false
的原始实现。您的新 require
方法不再 return 该值,而是始终 returns nil
(来自 p
方法的响应)。
我可以想象,在某些情况下,在代码中设置条件并根据 require
的响应定义常量是有意义的。
您可以通过交换方法中的行来解决问题:
def require(name)
puts "requiring '#{name}' in '#{caller_locations(1).first.path}'"
super
end