Ruby 撬动检查方法不起作用
我从《理解计算》一书中得到了以下代码。目的是更改Ruby 撬动检查方法不起作用,ruby,pry,Ruby,Pry,我从《理解计算》一书中得到了以下代码。目的是更改检查行为 class Number < Struct.new(:value) def inspect "<<#{self}>>" end def to_s value.to_s end end 但当我使用撬动时它不会: [8] pry(main)> n = Number.new(1) => #<struct Number value=1> [8]撬(主)>n=
检查
行为
class Number < Struct.new(:value)
def inspect
"<<#{self}>>"
end
def to_s
value.to_s
end
end
但当我使用撬动时它不会:
[8] pry(main)> n = Number.new(1)
=> #<struct Number value=1>
[8]撬(主)>n=编号。新(1)
=> #
Pry是Ruby 2.0.0上的0.10.3版。为什么不工作?Pry不只是使用inspect
来显示返回值。它调用在配置中定义的名为print object的过程。在lib/pry.rb
中,您可以发现它被设置为:
class Pry
# The default print
DEFAULT_PRINT = proc do |output, value, _pry_|
_pry_.pager.open do |pager|
pager.print _pry_.config.output_prefix
Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
end
end
end
要使用inspect
,如irb
中所述,请按照说明进行如下设置:
然后你会得到:
pry(main)> n = Number.new(1)
=> <<1>>
pry(main)>n=编号。新(1)
=>
我使用Pry
版本0.10.4
我刚刚在我的.pryrc
文件中添加了以下几行(我认为,这是一个很好的选择)
该代码的位置):
如果已定义?(BigDecimal)
BigDecimal.class_eval do
def检查
""
终止
终止
终止
结果:
balance: <+100.0>,
commission_amount: <+0.15>
余额:,
佣金金额:
修改所有对象的打印行为(并丢失Pry的所有漂亮打印)只是为了获得一个类所需的行为,这似乎是一种耻辱。根据您链接到的文档,将类添加到Pry.config.prompt\u safe\u对象
,难道不会完成同样的事情而不会产生不幸的副作用吗?
pry(main)> n = Number.new(1)
=> <<1>>
if defined?(BigDecimal)
BigDecimal.class_eval do
def inspect
"<#{to_s('+3F')}>"
end
end
end
balance: <+100.0>,
commission_amount: <+0.15>