2017-11-12 2 views
0

Ich möchte irb nicht meine Objekte Attribute standardmäßig zu drucken. Ist das möglich? Zum Beispiel habe ich:Wie Irb nicht zu drucken Objekte Attribut

class Test 
    @tmp = nil 
    def initialize(str) 
    @tmp = str 
    self 
    end 
end 

und ich bekomme:

irb> t = Test.new("hello") 
=> #<Test:0x18f6198 @tmp="hello"> 

Ich will nicht den @tmp="hello" Teil sehen.

+1

Haben Sie diese Art von Ausgabe in IRB zu unterdrücken wollen für alle Arten von Objekten, alle Instanzen der 'Test' Klasse oder nur diese spezifische Instanz? – spickermann

+0

Ich möchte diese Art der Ausgabe in allen Instanzen der Klasse Test unterdrücken. –

Antwort

4

IRB ruft standardmäßig inspect auf dem Rückgabewert auf. Wenn Sie diese Ausgabe in IRB unterdrücken oder ändern möchten, überschreiben Sie einfach inspect innerhalb Ihrer Klasse.

class Test 
    def initialize(str) 
    @tmp = str 
    end 

    def inspect 
    '<TEST CLASS>' 
    end 
end 

test = Test.new('foobar') 
#=> <TEST CLASS> 
+0

Danke, das ist, was ich gesucht habe. –

+0

Oder allgemeiner könnte man etwas wie "" <# {self.class.to_s} Class> "' schreiben. –

+0

Sicher, was auch immer das OP zeigen möchte - nur einige Attribute, eine ausgefallene Zeichenkette oder einfach nur "nil" ... – spickermann

1

den Inspektor Zeichenfolge wie der folgende Satz:

IRB.CurrentContext.inspect_mode = IRB::Inspector.new(->obj{ 
    "<##{obj.class}:#{obj.object_id}>" 
}) 

in irb Dann würden Sie wie das erhalten folgende:

"foo" 
# => <#String:47128160661240> 
+1

** Dies ist die richtige Antwort auf die Frage **, übrigens. Monkeypatching der Klasse ist nicht. – mudasobwa