Comment contrôler l'héritage lors de l'extension dynamique des classes de référence

StackOverflow https://stackoverflow.com/questions/7812678

  •  26-10-2019
  •  | 
  •  

Question

Dans un webcrawler / webscraper-cadre, je voudrais étendre dynamiquement ma base Référence de la classe URL afin de pouvoir écrire des méthodes de spécifiques pour hôtes / domaines respectifs. Pour être clair, par dynamiquement Je veux dire quelque chose comme « Générer automatiquement les définitions de classe en tant que nouveaux domaines sont rencontrés (par exemple URL_something.com de classe qui hérite de la classe URL) ».

fonctionne un régal, le seul problème est que mon WebPage classe attend la valeur de url sur le terrain pour être de URL de classe. Il acceptera des objets de URL_something.com de classe comme cette hérite de URL de classe, mais se transforme en fait l'objet dans une instance de URL de classe. Donc, je perds les informations qu'il est en fait de URL_something.com de classe.

Avez-vous une idée de la façon dont je peux éviter de perdre cette information cruciale?

Exemple de code

setRefClass(Class="URL", fields=list(x="character"))
setRefClass(Class="WebPage", fields=list(url="URL"))

obj <- new("WebPage", url=new("URL", x="http://www.something.com/home/index.html"))
obj$url

# Method would recognize that there is no class 'URL_something.com' 
# yet and thus create it:
setRefClass(Class="URL_something.com", contains="URL")

# Another method would take care of mapping field values to 
# an instance of the new class:
> url.obj <- new("URL_something.com", x="http://www.something.com/home/index.html")
> inherits(url.obj, "URL")
[1] TRUE

> obj$url <- url.obj
> class(obj$url)
[1] "URL"
# So I lose the information that it was actually of class "URL_something.com"
Était-ce utile?

La solution

Reprenant ce que Martin a dit (voir ci-dessus commentaires). R 2.14.0 corrige ce que je décrit ci-dessus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top