我在这里有一个问题,为什么我不有问题(这是一个很好的节奏变化)。请考虑以下
MyFuncs <- (function(){
hidden <- function(){return('ninja')}
foo <- function(){paste(hidden(), 'foo')}
bar <- function(){paste(hidden(), 'bar')}
return(list(foo = foo, bar = bar))
})()
因此,在获取此资源后,我有一个包含2个自定义函数的列表对象foo
和bar
。这两个函数都引用了另一个函数hidden
,它不是该列表的一部分。我无法致电hidden
,但foo
和bar
都完美无缺。由于R有懒惰的评估,我原本预计这些不起作用。 foo
的定义引用hidden
,当我尝试评估foo
时,我希望它会引发错误,因为hidden
无法评估。
> print(MyFuncs$foo())
[1] "ninja foo"
> print(MyFuncs$bar())
[1] "ninja bar"
> print(MyFuncs$hidden())
Error in print(MyFuncs$hidden()) : attempt to apply non-function
> foo2 <- function(){paste(hidden(), 'foo')}
> print(foo2())
Error in paste(hidden(), "foo") : could not find function "hidden"
尽可能地说,MyFuncs
下的函数被定义为在他们自己的环境中,这是未命名的,不在搜索路径中。我是否想要了解环境和框架之间的差异?