我已加载pry
并正在调试一些对象。通常,如果我只输入对象的名称pry
将自己输出它的表示,它看起来很棒。
例如,它就像是在pry
提示符并执行以下操作:
[1] pry(main):1> @myobj
pp @myobj
或y @myobj
或ap @myobj
或@myobj.inspect
pry
然后运行load /path/to/my/file.rb
?)答案 0 :(得分:4)
Pry是一个REPL - 读取评估打印循环。如果您仔细查看其源代码,您将看到Print部分最终由Proc处理,默认情况下,它会调用Pry::ColorPrinter
上的pp
类方法。该类继承自::PP
,它是负责pp
输出的类,它只是做一些与颜色,分页等有关的额外内容。所以在大多数情况下,是的,它只是{{ 1}}。
这里基本上是他们的代码的复制粘贴,可以给你你想要的东西:
pp
你可以根据自己的喜好调整它。然后,您可以通过说require 'pp'
require 'coderay'
class MyPrinter < ::PP
OBJ_COLOR = begin
code = CodeRay::Encoders::Terminal::TOKEN_COLORS[:keyword]
if code.start_with? "\e"
code
else
"\e[0m\e[0;#{code}m"
end
end
CodeRay::Encoders::Terminal::TOKEN_COLORS[:comment][:self] = "\e[1;34m"
def self.pp(obj, out = $>, width = 79)
q = new(out, width)
q.guard_inspect_key { q.pp obj }
q.flush
out << "\n"
end
def text(str, width = str.length)
if str.include?("\e[")
super "#{str}\e[0m", width
elsif str.start_with?('#<') || str == '=' || str == '>'
super highlight_object_literal(str), width
else
super CodeRay.scan(str, :ruby).term, width
end
end
def pp(obj)
super
end
end
之类的内容来使用它。
如果您不担心调整它并且很高兴依赖MyPrinter.pp(@myobj)
(及其所有依赖项),则不需要上述代码,只需使用Pry
即可您的代码(确保需要Pry::ColorPrinter.pp(@myobj)
,pp
和coderay
)