2016-05-06 4 views
-1

Я пытаюсь получить обратный вызов для всех итераций puts (puts, p) и предупредить.Обратный звонок для puts and warn Ruby

Например:

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

Как я смог бы добиться этого?

+0

Что такое обратный вызов? – sawa

+0

Что вы подразумеваете под термином ** iterations ** of puts? Вы имеете в виду ** каждый раз, когда puts называется **? – sawa

+0

Да, в основном захватить все stdout и stderr для функции. Как обертка. – KNgu

ответ

1

Вы можете сделать это, но будьте уверены, что захотите, потому что это применимо ко всей Ruby runtime, когда вы это делаете. Если вы работаете над проектом с другими людьми, обязательно получите свой бай-ин.

Для этого вы также можете использовать оригинальный метод для имени дополнительного метода. Затем вы переопределите метод для выполнения своей собственной обработки, который, как я полагаю, заканчивается вызовом исходного метода. Например, для 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

Будет ли лучший способ? Я пытаюсь захватить как stdout, так и stderr и отправить его через HTTP POST. – KNgu

+0

Почему бы не создать свой собственный метод, который делает сообщение, и вместо этого вызывать этот метод? Вы уверены, что хотите, чтобы каждый звонок помещался и т. Д., Отправлялся как HTTP POST? –

+0

Потому что я планирую использовать его в нескольких проектах и ​​переписывать каждый ставит и предупреждать будет сложной задачей. – KNgu

 Смежные вопросы

  • Нет связанных вопросов^_^