次の例では、他の 2 つの参照クラス オブジェクト (たとえば、2 人のサッカー [フットボール] 選手) の間で参照クラス オブジェクト (たとえば、ボール) への参照を「受け渡し」ようとしています。
# 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”)
理論的には、ボール オブジェクトへの参照を返してから、その参照を他のプレイヤーに追加しようとしていますが、明らかに機能していません。フィールドに直接アクセスすることで同じ結果を達成できることはわかっていますが、クラスの内部メソッドのみを使用してこの「パス」を達成する方法を見つけたいと思います。これは可能ですか?このエラーが発生するのはなぜですか?