2010-12-08 8 views

答えて

1

解決策は良いです。

暗い魔法が含まれていないため、コードがわかりにくくなり、エラーが発生しやすくなります。

1

IRBの場合はirb自体でmonkeypatchを定義し、monkeypatchesが 'load'で検査するファイルをロードすることができます。このようにしてコアコードベースから外しても、検査するすべてのクラスで検査をオーバーライドしなくても、必要な機能を得ることができます。

1

ネストされたハッシュなどがあるからです解読するのは難しいですが、awesome_printを試してみてください。あなたは.irbrcに次のように配置することによって、それIRBのデフォルトの出力フォーマッタ作ることができます。

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などの宝石が必要とされているすべての時間を壊すので、私はこれをお勧めしません。

irbをmonkeypatchingする代わりに、私は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に追加します。レール3.1.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

IでIRBのソースをチェックしたい場合例外メッセージも管理できるように、オブジェクト自体を(関連するクラスにBoringInspectというI includeというモジュールを介して)変更してください。

+0

+1ボーイングインスペクトが特にあなたのために適しているようです;) – horseyguy

+0

@バニスター:私はあなたが私をよく知っていることを理解していませんでした!それは+1か-1でしたか? –

+0

私はあなたのプルリクエストを読んで、ルビーコアから誓いの言葉を取り除いています。あなたは私がディナーパーティーに招待する人のようなものではありません! * yawn *;) – horseyguy

関連する問題