在面向对象的R编程(尤其是Winston Chang的R6软件包)中,active binding是什么?
最佳答案
首先,最好是了解什么是“绑定”。如果我们运行如下代码:
x <- 5
那么计算机内部发生的事情是,我们将值5放入了一个内存插槽中,并且还将名称“ x”“绑定”到了该位置和值,以便以后我们可以使用
x
,它将转到该内存位置并查找值(在将其更改为其他值之前为5)。这称为静态绑定,因为除非程序特别进行更改,否则值不会更改。主动绑定的相似之处在于,我们将变量名(例如“ x”)绑定到某物,但某物不仅是常量值,而且是每次我们尝试访问
x
时都会运行的函数。因此,您可以将名称“ x”绑定到一个调用rnorm
的函数,然后每次访问x
时,您将看到一个不同的随机正态值。再举一个例子,考虑一下我们是否对静态绑定进行了如下处理:
mydf <- data.frame( x=1:10, y=10:1 )
df.size <- nrow(mydf)
mydf <- data.frame(z=1:100)
现在变量
df.size
在创建时具有mydf
的行数,而不是现在的行数(因为nrow
运行一次,然后将结果作为静态变量放入df.size
变量中)绑定,它不会随着数据框的更改而更新)。另一方面,如果我们在df.size
和运行nrow(mydf)
的函数之间创建了活动绑定,那么无论何时我们查看df.size
的“值”,它都将显示mydf
中的当前行数。无论我们更改多少次。