irbで#inspectの出力を切り捨てたい(大きな出力をMAX_LENに切り捨てる必要がある)。irb(ルビー)で#inspectの出力を切り捨てる
現在、すべての特定のオブジェクトのoverride:inspect、:to_sメソッドです。
他に解決策はありますか?
- change $ stdout?
- 他?
irbで#inspectの出力を切り捨てたい(大きな出力をMAX_LENに切り捨てる必要がある)。irb(ルビー)で#inspectの出力を切り捨てる
現在、すべての特定のオブジェクトのoverride:inspect、:to_sメソッドです。
他に解決策はありますか?
解決策は良いです。
暗い魔法が含まれていないため、コードがわかりにくくなり、エラーが発生しやすくなります。
IRBの場合はirb自体でmonkeypatchを定義し、monkeypatchesが 'load'で検査するファイルをロードすることができます。このようにしてコアコードベースから外しても、検査するすべてのクラスで検査をオーバーライドしなくても、必要な機能を得ることができます。
ネストされたハッシュなどがあるからです解読するのは難しいですが、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を上書きする必要はありません。
清浄な溶液については、gem install hirb
。 hirb 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+については
、ヘルパーに以下のコードを配置/ 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
IでIRBのソースをチェックしたい場合例外メッセージも管理できるように、オブジェクト自体を(関連するクラスにBoringInspect
というI include
というモジュールを介して)変更してください。
+1ボーイングインスペクトが特にあなたのために適しているようです;) – horseyguy
@バニスター:私はあなたが私をよく知っていることを理解していませんでした!それは+1か-1でしたか? –
私はあなたのプルリクエストを読んで、ルビーコアから誓いの言葉を取り除いています。あなたは私がディナーパーティーに招待する人のようなものではありません! * yawn *;) – horseyguy