2011-01-28 19 views
16

Yakınlarda bir meslektaş, çağrı grafikleri arıyordu ve ne aradığını görmek istedim. Bu bana yapalımR işlevleri için bir dekoratör yazma

instrument=function(z){ 
    force(z) 
    n=deparse(substitute(z)) # get the name 
    f=function(...){ 
    cat("calling ", n,"\n") 
    x=z(...) 
    cat("done\n") 
    return(x) 
    } 
    return(f) 
} 

:

> foo=function(x,y){x+y} 
> foo(1,2) 
[1] 3 
Yani bunu biz mvbutils gelen foodweb ile hallettik ama R. içinde (piton konuşuyoruz) en iyi bir dekoratör oluşturma hakkında merak

ve şimdi onu sararak işlevi kendisini log yapabilirsiniz:

> foo=instrument(foo) 
> foo(1,2) 
calling foo 
done 
[1] 3 

bu demek bir pakette, daha önce yapılmış ve bunu yaparken tarzımı kıracak herhangi FRİKİKLERİNDEN kaçırmış?

+1

Adil soru, yanlış kitle. IMNSHO'nun bunu açıkça “r-devel” üzerinde sormanız gerekiyor. –

+3

Gabor seyircilerde olduğu sürece, doğru seyirci. – Spacedman

+2

Harika bir soru. Cevap kabul edilmesine rağmen, daha kanonik/ansiklopedik bir tane görmek istiyorum :) – fmark

cevap

9

R'de trace işlevi bu işlevi görür. Bakınız ?trace.

İlgili konular