题
我在用着 setMethodS3
在软件包r.Methodss3中以创建S3方法。可以说我有两个课, class Parent
和 class Child
(r.oo对象)。 class Child
继承 class Parent
. 。两者都有方法 MyMethod()
. 。我如何称呼超级类 MyMethod()
(父母 MyMethod
)来自儿童的 MyMethod()
?我尝试了这个$ myMethod(),但它称为孩子的 MyMethod()
这是一个简化的例子:
library( R.oo )
setConstructorS3( "Parent" , definition =
function()
{
extend( Object() , "Parent" , .stateVar1 = FALSE )
} )
setMethodS3( "MyMethod" , "Parent" , appendVarArgs = FALSE , definition =
function( this , someParam , ... )
{
print( this$.stateVar1 )
print( someParam )
} )
setConstructorS3( "Child" , definition =
function()
{
extend( Parent() , "Child" )
} )
setMethodS3( "MyMethod" , "Child" , appendVarArgs = FALSE , definition =
function( this , someParam , ... )
{
NextMethod( "MyMethod" ) # does not work
this$MyMethod( someParam ) # also does not work
} )
child = Child()
child$MyMethod()
解决方案
你想使用 NextMethod()
为达到这个。 NextMethod()
如果您使用的话会起作用 MyMethod(child)
, ,我强烈建议。
事实与 child$MyMethod()
似乎是对象类的错误。我会研究它。我认为这个错误未被注意到,因为 <object>$<method>()
任何人很少使用构造。这 MyMethod(child)
构造是标准R。我们在所有代码(> 100,000行)中使用它。诚实,我希望我从未写过 child$MyMethod()
在R.OO论文(2003)中。
最后,尽管不是必需的,但我建议您使用capitilizedNames使用RCC约定,用于类和非资本化名称,用于方法和对象, setMethodS3("myMethod", "Child", ...)
.
/Henrik(R.Methodss3和R.OO的作者)
其他提示
有什么原因您不想使用
MyMethod(child)
代替
child$MyMethod()
不隶属于 StackOverflow