R引用类中字段(数据成员)的自动更新
python中的R引用类中字段(数据成员)的自动更新,r,oop,reference-class,R,Oop,Reference Class,python中的decorator@property有什么等价物吗 也就是说,一个字段由于另一个字段的更新而自动更新(在访问时),而不是在访问之前重新计算它 更新2014-02-06 通过将“一个”字段定义为“另一个”字段的activeBindingFunction,打开自动更新功能(参见@jdharison的答案)。但是,是否仍有必要检查此类更新是否是延迟评估?如果没有,我们如何才能做到这一点 (稍后编辑:activeBindingFunction中的一个“非正式”打印函数显然表明评估是惰性的
decorator@property
有什么等价物吗
也就是说,一个字段由于另一个字段的更新而自动更新(在访问时),而不是在访问之前重新计算它
更新2014-02-06
通过将“一个”字段定义为“另一个”字段的activeBindingFunction
,打开自动更新功能(参见@jdharison的答案)。但是,是否仍有必要检查此类更新是否是延迟评估?如果没有,我们如何才能做到这一点
(稍后编辑:activeBindingFunction
中的一个“非正式”打印函数显然表明评估是惰性的。有没有更正式的方法来检查这个问题?)
为了更好地说明我的问题,下面是一段python代码,它通过decorator@property
-生成所需的惰性行为,请允许我将其放在R标记的问题中
class Test(object):
def __init__(self):
self._num1=None
self._num2=None
@property
def num1(self):
if (self._num1 is None):
self._num1=1
return(self.num1)
else:
return(self._num1)
@num1.setter
def num1(self, value):
self._num1 = value
@property
def num2(self):
self._num2=self._num1*2
return(self._num2)
互动会议
In [2]: obj=Test()
In [3]: obj.__dict__
Out[3]: {'_num1': None, '_num2': None}
In [4]: obj.num1
Out[4]: 1
In [5]: obj.__dict__
Out[5]: {'_num1': 1, '_num2': None}
In [6]: obj.num2
Out[6]: 2
In [7]: obj.__dict__
Out[7]: {'_num1': 1, '_num2': 2}
In [8]: obj.num1 = 5
In [9]: obj.__dict__
Out[9]: {'_num1': 5, '_num2': 2}
In [10]: obj.num2
Out[10]: 10
In [11]: obj.__dict__
Out[11]: {'_num1': 5, '_num2': 10}
不知道你是不是在追求什么
test <- setRefClass("test",
fields = list(
num1 = "numeric"
, num2 = function(){
print("hello")
2*.self$num1
}
),
methods = list(
initialize = function(num1 = 1){
num1 <<- num1
},
show = function(){
print(c(num1 = num1, num2 = num2))
}
)
)
> tt <- test()
> tt
[1] "hello;"
num1 num2
1 2
> tt$num1<-4
> tt
[1] "hello;"
num1 num2
4 8
测试谢谢!使用activeBindingFunction
类解决了我的大部分问题。我投票支持你。但正如更新的问题中所述,还有一个关于“懒惰评估”的问题。是的,这是显而易见的,尽管是非正式的。但它是有效的!我接受了你的回答。但是,我更希望使用更正式的oop语法来检查这一方面。不知道这是否真的可能。再次感谢!