2010-12-08 79 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