Я пытаюсь получить обратный вызов для всех итераций puts (puts
, p
) и предупредить.Обратный звонок для puts and warn Ruby
Например:
puts "test" -> def callback() -> "test"
Как я смог бы добиться этого?
Я пытаюсь получить обратный вызов для всех итераций puts (puts
, p
) и предупредить.Обратный звонок для puts and warn Ruby
Например:
puts "test" -> def callback() -> "test"
Как я смог бы добиться этого?
Вы можете сделать это, но будьте уверены, что захотите, потому что это применимо ко всей 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
Будет ли лучший способ? Я пытаюсь захватить как stdout, так и stderr и отправить его через HTTP POST. – KNgu
Почему бы не создать свой собственный метод, который делает сообщение, и вместо этого вызывать этот метод? Вы уверены, что хотите, чтобы каждый звонок помещался и т. Д., Отправлялся как HTTP POST? –
Потому что я планирую использовать его в нескольких проектах и переписывать каждый ставит и предупреждать будет сложной задачей. – KNgu
Что такое обратный вызов? – sawa
Что вы подразумеваете под термином ** iterations ** of puts? Вы имеете в виду ** каждый раз, когда puts называется **? – sawa
Да, в основном захватить все stdout и stderr для функции. Как обертка. – KNgu