R 函数流:为什么这个函数返回20
假设我有一个名为R 函数流:为什么这个函数返回20,r,function,scoping,R,Function,Scoping,假设我有一个名为l的函数: l <- function(x) x + 1 m <- function() { l <- function(x) x*2 l(10) } m() 为什么m返回x*2,而不是x+1?如果您不确定发生了什么,可以添加一些打印语句。让我们在代码中添加一些打印语句——一个在调用m之前,两个在m函数中,另一个在调用m之后: l <- function(x) x + 1 m <- function() { pri
l
的函数:
l <- function(x) x + 1
m <- function() {
l <- function(x) x*2
l(10)
}
m()
为什么
m
返回x*2
,而不是x+1
?如果您不确定发生了什么,可以添加一些打印语句。让我们在代码中添加一些打印语句——一个在调用m
之前,两个在m
函数中,另一个在调用m
之后:
l <- function(x) x + 1
m <- function() {
print(l)
l <- function(x) x * 2
print(l)
l(10)
}
print(l)
# function(x) x + 1
m()
# function(x) x + 1
# function(x) x * 2
# <environment: 0x7f8da5ac3b58>
# [1] 20
print(l)
# function(x) x + 1
l如果您不确定发生了什么,添加一些打印语句可能会有所帮助。让我们在代码中添加一些打印语句——一个在调用m
之前,两个在m
函数中,另一个在调用m
之后:
l <- function(x) x + 1
m <- function() {
print(l)
l <- function(x) x * 2
print(l)
l(10)
}
print(l)
# function(x) x + 1
m()
# function(x) x + 1
# function(x) x * 2
# <environment: 0x7f8da5ac3b58>
# [1] 20
print(l)
# function(x) x + 1
l在给定示例中,您正在调用函数m(),在函数m()中,您正在调用函数l()R将首先在函数环境中搜索,然后搜索调用它的环境,以便在调用函数之前选择第二个函数。必须定义函数。这就是为什么在函数定义之后调用函数。在给定示例中,调用函数m()和函数m()时您正在调用函数l()R将首先在函数环境中搜索,然后搜索调用它的环境,以便在调用函数之前选择第二个函数必须定义函数,这就是函数定义之后调用函数的原因非常感谢…您还可以告诉我什么是环境:0x7f8。。。输出就是这样,我正在尝试相同的打印和调试操作,它不断弹出而不是值?@VinayakBakshi这表明函数是在m
中定义的,而不是在全局环境中定义的。如果你对R环境的更多细节感兴趣,有。非常感谢…还可以告诉我dis环境:0x7f8。。。输出就是这样,我正在尝试相同的打印和调试操作,它不断弹出而不是值?@VinayakBakshi这表明函数是在m
中定义的,而不是在全局环境中定义的。如果您对R中环境的更多详细信息感兴趣,那么有。