2010-12-08 74 views

回答

1

您的解決方案很好。

它不涉及黑暗魔法,這可能會使代碼不易理解並容易出錯。

1

如果你只是在IRB中 - 你可以在irb本身定義一個monkeypatch,或者加載一個monkeypatches通過'load'檢查的文件。通過這種方式,您可以將其保留在您的核心代碼庫中,但您仍然可以獲得所需的功能,而無需在您希望檢查的每個課程中覆蓋檢查...

1

如果是因爲您有嵌套散列這很難破譯,請嘗試awesome_print。你可以把它在IRB默認的輸出格式通過放置在您的.irbrc如下:

require 'ap' 

module IRB 
    class Irb 
    def output_value 
     ap @context.last_value 
    end 
    end 
end 

這使得對象有很多數據容易IRB破譯。

即使您不使用awesome_print,也可以使用相同的技術截斷輸出,因此您不必在代碼中重寫to_s。

5

對於乾淨的解決方案,gem install hirbhirb頁面irb的返回值如果太長。

如果你想猴補丁IRB:

module IRB 
    class Irb 
    def output_value 
    @context.last_value.to_s.slice(0, MAX_LEN) 
    end 
    end 
end 

我不建議這樣做,因爲這是一個黑客,突破隨時寶石等所需的AP和hirb。

而不是monkeypatching irb,我建議嘗試ripl,這是一個irb替代品,旨在擴展。 以上爲RIPL插件是:

require 'ripl' 
module Ripl::SlicedInspect 
    def format_result(result) 
    result_prompt + result.inspect.slice(MAX_LEN) 
    end 
end 
Ripl::Shell.send :include, Ripl::SlicedInspect 

有了這個插件,你可以根據需要要求,或添加到您的〜/ .riplrc,如果你想一直使用它。

1

鋼軌3.1.1+,將下面的代碼中助手/ irb_helper.rb

module IRB 
    class Irb 
    MAX_LEN = 10000 

    def output_value 
     if (@context.inspect_last_value.length > MAX_LEN) 
     printf @context.return_format, "#{@context.inspect_last_value[0..MAX_LEN]} <- Truncated" 
     else 
     printf @context.return_format, @context.inspect_last_value 
     end 
    end 
    end 
end 

如果您想自定義你的輸出更多,在https://github.com/Ruby/Ruby/blob/trunk/lib/irb.rb

0

我有時檢查IRB的源修改對象本身(通過一個名爲BoringInspect的模塊,我將include轉化爲相關的類),這樣異常消息也是可管理的。

+0

+1 BoringInspect似乎特別適合你;) – horseyguy 2012-01-09 01:08:29