2014-04-04 107 views
2

我正在嘗試編寫一些S3方法,我希望它們共享常見的錯誤處理代碼。這似乎是顯而易見的方式對我說:如何結合tryCatch和UseMethod?

myMethod <- function(x) { 
    tryCatch(UseMethod("myMethod", x), error=function(e) paste("Caught:", e)) 
} 

myMethod.default <- function(x) print("Default.") 

但它不工作,因爲UseMethod不喜歡被包裹在tryCatch

myMethod(0) 
[1] "Caught: Error in UseMethod(\"myMethod\", x): 'UseMethod' used in an inappropriate fashion\n" 

沒有人有哪裏去任何意見從這裏?

回答

2

只是把它包起來。

myMethod <- function(x) { 
    fn <- function() UseMethod("myMethod", x) 
    tryCatch(fn(), error = function(e) paste("Caught:", e)) 
} 
myMethod.default <- function(x) print("Default.") 

myMethod(structure('1', class='default')) 
# [1] "Default." 
+0

謝謝你,這比我的解決方法要乾淨得多! – pete