R语言函数括号外写变量的含义?以makeVector的get方法为例
理解R语言闭包中的外层变量访问
这个问题问得很好!你看到的get <- function() x里的x并不是什么简写,而是R语言中**闭包(Closure)**的典型用法——内部函数可以访问并使用外层函数作用域中的变量。
先搞懂makeVector的本质:它是一个函数工厂
makeVector本身是一个函数,它执行后会返回一个包含4个函数(set、get、setmean、getmean)的列表。这4个内部函数都“记住”了makeVector执行时的环境(包括其中定义的x和m变量),即使makeVector已经执行完毕,这些内部函数依然能访问到这些变量——这就是闭包的核心能力。
具体看get <- function() x的逻辑
get是一个没有参数的函数,它的唯一作用就是返回makeVector中定义的x变量。- 这里的
x并不是get函数自身的参数或局部变量,而是来自外层作用域(也就是makeVector的执行环境)。当你调用get()时,R会先在get自己的环境里找x,找不到就去它的外层环境(makeVector的环境)里找,直到找到为止。
结合整个makeVector的工作流程理解
举个实际使用的例子:
# 创建一个vector对象,此时makeVector里的x被设为1:10,m为NULL vec <- makeVector(1:10) # 调用get(),返回外层环境的x值:1到10 vec$get()
当你执行vec$get()时,get函数就会去它所属的闭包环境(当初创建vec时makeVector的执行环境)中取出x的值并返回,完全不需要在get的括号里定义参数。
再对比set函数里的x <<- y:这里的<<-是赋值到外层环境,而get里的x是直接读取外层环境的变量,两者都是闭包特性的体现,只是一个是读,一个是写。
内容的提问来源于stack exchange,提问作者Mauro
相关产品推荐
相关产品推荐

