setRefClass按值传递,按引用传递

时间:2013-03-21 09:56:36

标签: r reference-class

我怀疑我不理解R中setRefClass的所有方面。让我说我有setRefClass初始化的实例。我想创建变量X,以便此变量等于实例的副本或引用setRefClass的实例。 是否有区别:

x = InstanceOfsetRefClass

x <<- InstanceOfsetRefClass

我不完全理解,似乎我的代码中有一些奇怪的行为。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

我不认为你的问题与引用类有关,而是与范围有关。请考虑以下示例。我们首先从工作区中删除所有变量,然后为A创建一个定义:

rm(list=ls())
A = setRefClass("A", fields=list(x="numeric"))

接下来,我们创建并调用函数f

f = function() {
  x1 = 1
  a1 = A$new(x=10)
  x2 <<- 2
  a2 <<- A$new(x=10)
}
f()

<<-=之间的主要区别是

  

运营商'&lt;&lt; - &'和' - &gt;&gt;'通常只用于函数,和   导致搜索通过父环境进行搜索   被分配的变量的定义。如果这样的变量是   找到(并且其绑定未锁定)然后重新定义其值,   否则,分配将在全球环境中进行。

     

在帮助页面中:?“&lt;&lt; - ”

因此,在全球环境中找不到使用=创建的变量

R> x1
Error: object 'x1' not found
R> a1
Error: object 'a1' not found

但其他变量是:

R> x2
[1] 2
R> a2
Reference class object of class "A"
Field "x":
[1] 10