Uyarılar gönderilen uyarıları yakalamak için nasıl oluşturulan S4 jenerik fonksiyonlarının değerlendirilmesi argümanlar withCallingHandlers kullanılarak yakalandı edilemez zaman(). withCallingHandlers normal davranışS4 yöntemi seçimi sırasında
İllüstrasyon: Bu sırasında olmamasını göstermek için
### simplest method ever
setGeneric('my_method', function(x) standardGeneric('my_method'))
setMethod('my_method', 'ANY', function(x) str(x))
### call it with an argument that produces a warning: seems to work
my_method(warning('argh'))
# chr "argh"
# Warning message:
# argh
### !!! BUT it is not caught !!!!!!!!!!!!!!!!!!:
withCallingHandlers(my_method(warning('argh')), warning = function(w)
{ stop('got warning:', w) })
# chr "argh"
# Warning message:
# argh
Son bir örnek: Şimdi
### simple function that sends a warning
send_warning <- function() {
warning('send_warning')
}
send_warning()
# Warning message:
# In send_warning() : send_warning
### the warning can be caught by withCallingHandlers
withCallingHandlers(send_warning(), warning = function(w)
{ stop('got warning:', w) })
# Error in (function (w) :
# got warning:simpleWarning in send_warning(): send_warning
, uyarısı bir S4 sevk sırasında yayılması yapalım S4 yöntemi çağrısı:
setGeneric('my_method2', function(x) standardGeneric('my_method2'))
setMethod('my_method2', 'ANY', function(x) warning('my_method2'))
my_method2()
# Warning message:
# In my_method2() : my_method2
### warning is caught
withCallingHandlers(my_method2(), warning = function(w)
{ stop('got warning:', w) })
# Error in (function (w) :
# got warning:simpleWarning in my_method2(): my_method2
Anladığım kadarıyla var gibi görünüyor. S4 dağıtımı sırasında yayınlanan uyarıların özel davranışı. Onları neden ve nasıl yakalayacağını bilmek isterim.
R-dev e-posta listesinde tartışılan, bunu ya da bunun gibi bir şey görmenin belirsiz bir anımsaması var ... – Spacedman