Преобразование из суперкласса в унаследованный класс в R6
Допустим, у меня есть
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.
И это сохранило бы все свойства.
Заранее спасибо.
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.