Общие функции на объектах с несколькими классами - PullRequest
0 голосов
/ 01 апреля 2019

Мне интересно написать общий метод, который ведет себя на основе нескольких типов классов одного и того же объекта. Например, скажем, у нас есть следующее:

redApple <- function(){
 structure(list(), class = c("apple", "red"))
}

greenApple <- function(){
 structure(list(), class = c("apple", "green"))
}

eat <- function(x)UseMethod("eat")
eat.apple <- function(x)  print("Eating apple")

color <- function(x) UseMethod("color")
color.red <- function(x) print("my food is red")
color.green <- function(x) print("my food is green")

Теперь мы создаем следующие объекты:

obj1 <- redApple()
obj2 <- greenApple()

Здесь color(obj1) печатает my food is red и color(obj2) печатает my food is green, в то время как оба eat(obj1) и eat(obj2) печатают Eating apple.

Теперь я бы хотел, чтобы моя универсальная функция работала по-разному для obj1 и obj2. Например, я бы хотел eat(obj1) напечатать Eating red apple и eat(obj2) напечатать Eating green apple

1 Ответ

0 голосов
/ 01 апреля 2019

Вы можете проверить класс объекта, передаваемого в функцию, и соответственно создать регистры:

eat.apple <- function(x)  
{
  if("green" %in% class(x)) print("Eating green apple")
  else if("red" %in% class(x)) print("Eating red apple")
  else print("Eating generic apple!")
}

##addition

eat.green <- function(x)  
{
  print("Eating green apple")
}

eat.red <- function(x)  
{
  print("Eating red apple")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...