Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 撬动检查方法不起作用_Ruby_Pry - Fatal编程技术网

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>