Ruby on rails 当你只是传递一个对象时,pry使用什么函数或方法?
我已经加载了Ruby on rails 当你只是传递一个对象时,pry使用什么函数或方法?,ruby-on-rails,ruby,debugging,irb,pry,Ruby On Rails,Ruby,Debugging,Irb,Pry,我已经加载了pry,正在调试一些对象。通常情况下,如果我只是键入对象的名称,pry会自己输出一个对象的表示,它看起来很棒 例子: 例如,这就像在pry提示符下执行以下操作: [1] pry(main):1> @myobj 结果: 困惑: 我没有打电话给pp@myobj或y@myobj或ap@myobj或@myobj.inspect 如果我调用了其中任何一个,我得到的输出看起来都不一样(而且格式也不太漂亮) 问题: 调用什么方法以这种方式输出对象 我可以在脚本文件中使用该方法以相同
pry
,正在调试一些对象。通常情况下,如果我只是键入对象的名称,pry
会自己输出一个对象的表示,它看起来很棒
例子:
例如,这就像在pry
提示符下执行以下操作:
[1] pry(main):1> @myobj
结果:
困惑:
- 我没有打电话给
或pp@myobj
或y@myobj
或ap@myobj
@myobj.inspect
- 如果我调用了其中任何一个,我得到的输出看起来都不一样(而且格式也不太漂亮)
- 调用什么方法以这种方式输出对象
- 我可以在脚本文件中使用该方法以相同的格式输出格式吗?
(即,执行
,然后运行pry
?)load/path/to/my/file.rb
pp
类方法。该类继承自::PP
,该类负责PP
中的输出,它只做一些与颜色、分页等相关的额外工作。因此,在大多数情况下,是的,它只是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
require'pp'
需要“coderay”
类MyPrinter<::PP
OBJ_颜色=开始
code=CodeRay::编码器::终端::标记颜色[:关键字]
如果code.start_与?“\e”
代码
其他的
“\e[0m\e[0;#{code}m”
结束
结束
CodeRay::编码器::终端::标记颜色[:注释][:自]=“\e[1;34m”
def self.pp(obj,out=$>,width=79)
q=新(向外,宽度)
q、 保护检查键{q.pp obj}
q、 冲洗
out看起来也可以做Pry::ColorPrinter::pp(@myobj)
来得到我想要的;)但是如果没有你的帮助,我是不会得到这个的。