语言采用的是Lexical Scoping(词法作用域)。词法作用域,又称静态作用域,即变量定义后的作用域是不变的。
在函数的主体里面,变量是分为被约束的、局部的、或自由的三种。被约束的变量是指匹配函数形式参数的变量。局部变量是指,在函数主题内创建和定义的变量。自由变量指的是那些既不是
局部也不是被约束的变量。当一个函数主体被求值,确定一个局部或 被约束变量的值没有问题。作用域规则决定了一个语言如何为自由变量
找恰当的值。
在R中,自由变量的取值是由它所在函数定义的环境(environment)中的取值决定的。看下面一段代码:
y <- 10
f<- function(x){
y <- 2
y^2 + g(x)
}g <- function(x){
x*y
}f(3)
求值f(3):
y是函数f中的局部变量,被赋值为2;在函数f内调用函数g,在函数g中y是自由变量,g(2)=2*y,y的取值是由定义函数g时决定的,因此y的取值是10而不是2。因此得到值为34。
参见:http://www.biosino.org/R/R-doc/R-lang/Scope.html
R语言变量作用域
时间: 2024-09-29 02:27:59