【发布时间】:2017-07-18 17:22:17
【问题描述】:
我对 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(),则不会出现问题,但会收到警告 "In sq(2) : restarting interrupted promise evaluation":
mod <- function(z){z+1}
sq(2)
rm(mod)
sq(2)
在新的上下文中使用闭包之前,如何避免在全局环境中定义 mod() 来调用闭包?在范围界定和承诺方面发生了什么?
【问题讨论】:
标签: r function functional-programming closures higher-order-functions