Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中引用类的函数重载?_R_Oop_Overloading - Fatal编程技术网

R中引用类的函数重载?

R中引用类的函数重载?,r,oop,overloading,R,Oop,Overloading,以下是我的尝试: MyClass = setRefClass("MyClass", fields = c("x", "y")) MyClass$methods( myadd = function() { x + y } ) MyClass$methods( myadd = function(n) { x + y + n } ) MyClass$methods( initialize = function(xinit, yin

以下是我的尝试:

MyClass = setRefClass("MyClass", fields = c("x", "y"))
MyClass$methods(
    myadd = function() {
        x + y
    }
)
MyClass$methods(
    myadd = function(n) {
        x + y + n
    }
)
MyClass$methods(
    initialize = function(xinit, yinit) {
        x <<- xinit
        y <<- yinit
    }
)

myobj = MyClass(2, 3)
myobj$myadd()

我相信R-ish的方法是在方法中使用默认参数。比如:

MyClass = setRefClass("MyClass", fields = c("x", "y"))
MyClass$methods(
  myadd = function(n=0) {
      x + y + n
  }
)
MyClass$methods(
  initialize = function(xinit, yinit) {
      x <<- xinit
      y <<- yinit
  }
)
冒着被称为“哈德利·威克姆粉丝”(又一次!)的风险,关于R对象系统的一个重要信息来源是哈德利的

值得一提的是,如果您确实需要实现具有复杂分派的方法,则提供了相当大的功能,但可能会以一些额外的复杂性和冗长性为代价

MyClass = setRefClass("MyClass", fields = c("x", "y"))
MyClass$methods(
  myadd = function(n=0) {
      x + y + n
  }
)
MyClass$methods(
  initialize = function(xinit, yinit) {
      x <<- xinit
      y <<- yinit
  }
)
myobj = MyClass(2, 3)
myobj$myadd()
[1] 5

myobj$myadd(5)
[1] 10