0
と呼ばれるまで閉鎖は私がRでの高階関数に問題が持っているオブジェクトを見つけることができません。しかしR:
power <- function(x , modify){
return(
function(y){
return( modify(y^x))
}
)
}
mod <- function(z){z+1}
sq <- power(x = 2,modify = mod )
# remove the function that was passed to `power()`, I expect it to be saved in the function environment:
rm(mod)
sq(2)
# Error in sq(2) : object 'mod' not found
を私はmod()
を削除する前に何らかの方法でsq()
を呼び出す場合、問題は発生しません。私は新しいコンテキストでクロージャを使用する前に、地球環境に定義されているmod()
とクロージャを呼び出すことを避けることができますどのように
mod <- function(z){z+1}
sq(2)
rm(mod)
sq(2)
:が、私は警告"In sq(2) : restarting interrupted promise evaluation"
を取得しますか?スコープと約束の点でここでは何が起こっていますか?
は@DavidHeckmann:仮引数として関数に渡されたオブジェクトは、そのようにだけでなく、他の機能を動作します。 '?force'の例を見てください。 –