2016-05-06 4 views
-1

Ich versuche, einen Rückruf für alle Iterationen von Puts zu haben (puts, p) und warnen.Rückruf für Puts und warnen Ruby

Zum Beispiel:

puts "test" -> def callback() -> "test" 

Wie würde ich in der Lage sein, dies zu erreichen?

+0

Was ist ein Rückruf? – sawa

+0

Was meinen Sie mit ** Iterationen ** Puts? Meinst du das jedesmal wenn Puts ** genannt wird? – sawa

+0

Ja, im Prinzip erfassen alle stdout und stderr zu einer Funktion. Wie ein Wrapper. – KNgu

Antwort

1

Sie können dies tun, aber seien Sie sich wirklich sicher, dass Sie wollen, denn es wird immer auf die gesamte Ruby-Laufzeit angewendet. Wenn du mit anderen Leuten an einem Projekt arbeitest, solltest du dir ihr Buy-in sichern.

Um dies zu tun, führen Sie einen Alias ​​für die ursprüngliche Methode zu einem zusätzlichen Methodennamen. Dann definierst du die Methode neu, um deine eigene Verarbeitung zu machen, was vermutlich damit endet, dass du die ursprüngliche Methode aufruft. Zum Beispiel für puts:

#!/usr/bin/env ruby 

module Kernel 
    alias original_puts puts 
    def puts(object) 
     # Do my own processing here, e.g. 
     original_puts "This is coming from my overrided puts:" 
     original_puts(object) 
    end 
end 

puts 'hi' 

=begin 

Outputs: 

This is coming from my overrided puts: 
hi 

=end 
+0

Wäre es ein besserer Weg? Ich versuche, sowohl stdout und stderr zu erfassen und es über einen HTTP-POST zu senden. – KNgu

+0

Warum nicht eine eigene Methode erstellen, die den Post erledigt und stattdessen diese Methode aufruft? Sind Sie sicher, dass Sie jeden einzelnen Anruf an Puts usw. als HTTP-POST senden möchten? –

+0

Weil ich plane, es in mehreren Projekten zu verwenden und jeden Puts neu zu schreiben und zu warnen, wäre entmutigend. – KNgu