2016-04-16 52 views
1

我從瞭解計算書以下代碼。目的是改變inspect的行爲。撬查方法不起作用

class Number < Struct.new(:value) 
    def inspect 
    "<<#{self}>>" 
    end 
    def to_s 
    value.to_s 
    end 
end 

它按預期工作當我使用irb

irb(main):014:0> Number.new(1) 
=> <<1>> 

但它沒有當我使用pry

[8] pry(main)> n = Number.new(1) 
=> #<struct Number value=1> 

撬是0.10.3版本上的Ruby 2.0。 0。爲什麼它不起作用?

回答

3

Pry不僅使用inspect來顯示返回值。它調用在配置中定義的名爲的打印對象。在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 

爲了使用inspectirb,設置這樣的指示here

Pry.config.print = proc {|output, value| output.puts "=> #{value.inspect}"} 

然後你會得到:

pry(main)> n = Number.new(1) 
=> <<1>> 
+0

完美的作品 - 謝謝! – evolution

+1

修改所有對象的打印行爲(並且失去所有Pry的漂亮打印)似乎是一種恥辱,只是爲了獲得一個類的行爲。根據鏈接到的文檔,不會將該類添加到「Pry.config.prompt_safe_objects」中,從而在沒有不幸副作用的情況下完成同樣的任務? –