r - 在两个其他引用类对象之间传递对引用类对象的引用(足球示例)

标签 r oop object pass-by-reference reference-class

我试图通过以下示例在两个其他引用类对象(例如,两个足球 [football] 运动员)之间“传递”对引用类对象(例如,一个球)的引用:

# create Reference classes
b <- setRefClass('Ball', fields = list(size = 'numeric'))

    p <- setRefClass('Player', fields = list(name = 'character', possession = 'Ball'), 
methods = list(pass = function(){
        tmp <- possession$copy()
        possession <<- NULL
        return(tmp)
    }, receive = function(newBall){
        possession <<- newBall
} 
))


# initialize pretend all-star team
# p1 gets initial possession of a new ball
p1 <- p$new(name = 'Ronaldinho', possession = b$new(size=5) )

p2 <- p$new(name = 'Beckham')

# now pass the ball from p1 to p2
p2$receive(p1$pass())

但是我得到以下错误:

Error in function (value)  : 
  invalid replacement for field ‘possession’, should be from class “Ball” or a subclass (was class “NULL”)

理论上我试图返回对球对象的引用,然后将该引用添加到另一个玩家,但显然这是行不通的。我知道通过直接访问字段可以获得相同的结果,但我想找到一种方法来仅使用类的内部方法来完成此“通过”。这可能吗?为什么会出现此错误?

最佳答案

您可能会遇到错误,因为当您定义 Player 类时,您将 possession 字段设置为 Ball 类型。但是在您的 pass 函数中,您将 possession 设置为 NULL:

possession <<- NULL

如果您将初始化更改为:

p = setRefClass('Player', fields = list(name = 'character', possession = 'ANY')

然后一切都按预期工作:

R> p2$receive(p1$pass())
R> p1
Reference class object of class "Player"
Field "name":
[1] "Ronaldinho"
Field "possession":
NULL
R> p2
Reference class object of class "Player"
Field "name":
[1] "Beckham"
Field "possession":
Reference class object of class "Ball"
Field "size":
[1] 5

关于r - 在两个其他引用类对象之间传递对引用类对象的引用(足球示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047026/

相关文章:

r - 如何使用 purrr::pmap 调用 R 中的用户定义函数

r - 无法将R代码从针织文档发送到SublimeREPL

python - 类型错误 : It would appear that nargs is set to conflict with the composite type arity

c++ - 如何将公共(public)接口(interface)的子集暴露给类

c# - 基类设置为派生类,无法调用派生类中的方法?

javascript - 将具有数组属性的对象展平为一个数组的最佳方法

r - 如何计算 R 中线性回归模型中斜率的 95% 置信区间

r - 在表格中呈现 Tukey HSD 成对 p 值

java - 比较器和比较器之间的区别?

javascript - 将对象数组转换为具有数组值的对象