R

时间:2016-04-12 22:50:00

标签: r

我在这里有一个问题,为什么我有问题(这是一个很好的节奏变化)。请考虑以下

MyFuncs <- (function(){

  hidden <- function(){return('ninja')}      
  foo <- function(){paste(hidden(), 'foo')}      
  bar <- function(){paste(hidden(), 'bar')}      
  return(list(foo = foo, bar = bar))

})()

因此,在获取此资源后,我有一个包含2个自定义函数的列表对象foobar。这两个函数都引用了另一个函数hidden,它不是该列表的一部分。我无法致电hidden,但foobar都完美无缺。由于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下的函数被定义为在他们自己的环境中,这是未命名的,不在搜索路径中。我是否想要了解环境和框架之间的差异?

0 个答案:

没有答案