2 つの単純なクラスがあります。
.A1 <- setClass("A1",
representation=representation( x1 ="numeric"),
prototype = prototype(x1 = 10))
.A2 <- setClass("A2", contains="A1",
representation=representation(x2="numeric"),
prototype = prototype(x2 = 10))
setMethod("initialize", "A2",
function(.Object, ..., x2 = .Object@x2)
{
callNextMethod(.Object, ..., x2 = x2)
})
このコードを使用すると、すべてが機能します。
a1 <- .A1(x1 = 3)
initialize(a1)
a2 <- .A2(x1 = 2, x2 = 4)
initialize(a2, x2 = 3)
.A2(a1, x2 = 2)
An object of class "A2" # WORKS!
Slot "x2":
[1] 2
Slot "x1":
[1] 3
特に最後の行が機能するため、a1 は「A2」オブジェクト内にコピーされます。問題は、基本クラスに対しても「初期化」を定義すると、最後の行が機能しなくなることです。
setMethod("initialize", "A1",
function(.Object, ..., x1 = .Object@x1)
{
callNextMethod(.Object, ..., x1 = x1)
})
## I have to redefine also this initializer, otherwise it will call
## the default initializer for "A1" (it was stored in some lookup table?)
setMethod("initialize", "A2",
function(.Object, ..., x2 = .Object@x2)
{
# your class-specific initialization...passed to parent constructor
callNextMethod(.Object, ..., x2 = x2)
})
そして今、私は得る:
.A2(a1, x2 = 2)
An object of class "A2" # BAD!
Slot "x2":
[1] 2
Slot "x1":
[1] 10
「A1」の初期化子に何か問題があると思いますが、アイデアはありますか? ありがとう!