【问题标题】:Overloading Kernel.require() without braking it重载 Kernel.require() 而不破坏它
【发布时间】:2020-06-26 01:16:33
【问题描述】:

我正在尝试重载Kernel.require() 方法以获取构建代码依赖树所需的数据。这就是我简单地想象新的 require 方法的方式:

def require arg
  super arg
  puts "including '#{arg}' in '#{caller_locations(1).first.path}'"
end

不幸的是,我发现这会在代码中的其他位置阻止 require() 调用,从而导致错误序列。

【问题讨论】:

  • 除非有要求,否则请不要在您的问题中添加 cmets。评论是给需要你澄清的人的;您的回答应该是在您的问题中添加其他信息以澄清问题,就好像一直存在一样,而不使用“编辑”或“更新”类型标签,因为我们可以看到发生了什么变化以及何时需要。

标签: ruby kernel overloading require


【解决方案1】:

Kernel#require 的原始实现返回truefalse。您的新 require 方法不再返回该值,而是始终返回 nil(来自 p 方法的响应)。

我可以想象,在某些情况下,在代码中添加条件并根据require 的响应定义常量是有意义的。

您可以通过交换方法中的行来解决此问题:

def require(name)
  puts "requiring '#{name}' in '#{caller_locations(1).first.path}'"
  super
end

【讨论】:

  • p 方法返回一个字符串,puts 返回一个nil,但你帮了我很多。谢谢!
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多