我在用着 setMethodS3 在软件包r.Methodss3中以创建S3方法。可以说我有两个课, class Parentclass 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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top