0

私が持っているとしましょう

library(R6)

Person <- R6Class("Person",
              public = list(
                name = NULL,
                hair = NULL,
                initialize = function(name = NA, hair = NA) {
                  self$name <- name
                  self$hair <- hair
                  self$greet()
                },
                set_hair = function(val) {
                  self$hair <- val
                },
                greet = function() {
                  cat(paste0("Hello, my name is ", self$name, ".\n"))
                }
              )
)

PersonWithSurname <- R6Class("PersonWithSurname",
                         inherit = Person,
                         public = list(surname = NA,
                                       initialize = function(name, surname, hair) {
                                         super$initialize(name, hair)
                                         self$surname <- surname
                                       })
)

次に、R コンソールで次のように言いました。

newobject <- Person("Ann", "black")
Hello, my name is Ann.

継承されたオブジェクトで名前を再利用したり、コードを書き直したりせずに、上記のオブジェクトを使用できる方法はありますか?

例:やりたくない

inheritObject <- PersonWithSurname$new("Ann", "Doe", "black")
Hello, my name is Ann.

「あん」と「くろ」を繰り返しているので理想はただ欲しいだけ

inheritObject <- PersonWithSurname$new("Doe")
Hello, my name is Ann.

そして、それはすべてのプロパティを保持します。

前もって感謝します。

4

1 に答える 1

1

次のようなことができます:

PersonWithSurname <- R6Class("PersonWithSurname",
                         inherit = Person,
                         public = list(surname = NA,
                                       initialize = function(name, surname, hair) {
                                         if (inherits(name,"Person")) super$initialize(name$name, name$hair) else
                                         super$initialize(name, hair)
                                         self$surname <- surname
                                       })
)

ご覧のとおり、名前を定義するPerson代わりに、コンストラクターでオブジェクトを提供できるようにしました。characterそれを試してみてください:

inheritObject<-PersonWithSurname$new(newobject,"Doe")
#Hello, my name is Ann.
于 2016-11-03T11:03:27.310 に答える