我正在开发一个覆盖Pry.config.print
方法的gem。这是执行此操作的代码:
if !!defined?(::Pry)
puts 'Working with Pry'
Pry.config.print = proc do |output, value|
if value.class.included_modules.include?(::Organizer::Explainer)
output.puts "#{value.inspect}"
else
::Pry::DEFAULT_PRINT.call(output, value, _pry_)
end
end
else
puts 'Not working with Pry'
end
我将我的gem包含在rails项目中,在执行rails c
后,我可以看到消息:"不使用Pry" 。
然后,我将以前的代码复制/粘贴到控制台中,我可以看到消息:"使用Pry" ,一切正常。
所以,问题是我需要在加载pry后执行de代码。我该怎么做?
答案 0 :(得分:0)
Rails在开发过程中懒得运行,所以在Pry
会话期间尝试使用rails console
之前,它就不会被加载。这听起来像是第一次运行代码时,没有任何内容访问过Pry
,但第二次出现了问题。
为了确保在您尝试使用或monkeypatch之前加载库,特别是如果您正在开发可以在Rails之外使用的gem,其中加载必须更明确,只需要它。所以在这种情况下,
require 'pry'
您可以使用干净的IRB会话来说明这一点:
$ irb
2.3.0 :001 > defined?(Pry)
=> nil
2.3.0 :002 > require 'pry'
=> true
2.3.0 :003 > defined?(Pry)
=> "constant"