2017-01-08 87 views
0

我知道局部函數是如何工作的。但是,當我查看partial()的源代碼時,我不太明白它是如何工作的。有誰能告訴我每條線的工作原理嗎?瞭解pryr軟件包(R語言)中partial()函數的代碼?

> partial 
function (`_f`, ..., .env = parent.frame(), .lazy = TRUE) 
{ 
    stopifnot(is.function(`_f`)) 
    if (.lazy) { 
     fcall <- substitute(`_f`(...)) 
    } 
    else { 
     fcall <- make_call(substitute(`_f`), .args = list(...)) 
    } 
    fcall[[length(fcall) + 1]] <- quote(...) 
    args <- list(... = quote(expr =)) 
    make_function(args, fcall, .env) 
} 
<environment: namespace:pryr> 

什麼是`_f`?爲什麼以這種方式使用替代品()

substitute(`_f`(...)) 

這是什麼?

quote(expr =) 

爲什麼需要以下行?

fcall[[length(fcall) + 1]] <- quote(...) 

回答

0

R中的一些操作看起來不像函數調用,但它們是。例如,3 + 4也可以寫成'+'(3,4)。在這種情況下,由於部分函數通過預先填充參數來工作,因此這裏的「替代」通過將環境中找到的任何變量替換爲「...」來工作。

報價()的作品通過捕捉動作

好像FCALL線是用來維持了最初放入部分呼叫

+0

感謝漂亮的解釋!如何解釋expr =在報價中?爲什麼有必要? – user2149631