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?
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?
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
Wäre es ein besserer Weg? Ich versuche, sowohl stdout und stderr zu erfassen und es über einen HTTP-POST zu senden. – KNgu
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? –
Weil ich plane, es in mehreren Projekten zu verwenden und jeden Puts neu zu schreiben und zu warnen, wäre entmutigend. – KNgu
Was ist ein Rückruf? – sawa
Was meinen Sie mit ** Iterationen ** Puts? Meinst du das jedesmal wenn Puts ** genannt wird? – sawa
Ja, im Prinzip erfassen alle stdout und stderr zu einer Funktion. Wie ein Wrapper. – KNgu