Come controllare l'ereditarietà quando si estende dinamicamente classi di riferimento
-
26-10-2019 - |
Domanda
In un webcrawler / webscraper-impostazione, vorrei estendere dinamicamente la mia base di riferimento alla classe URL
al fine di essere in grado di metodi specifici di scrittura per host rispettivi / domini. Giusto per essere chiari, da in modo dinamico ho qualcosa di dire, come " generare automaticamente le definizioni di classe come si incontrano nuovi domini (ad esempio classe URL_something.com
, che avrebbe ereditato dalla classe URL
)".
funziona a meraviglia, l'unico problema è che la mia classe WebPage
si aspetta che il valore del campo url
per essere di classe URL
. Accetterà oggetti della classe URL_something.com
come questa eredita dalla classe URL
, ma poi effettivamente trasforma l'oggetto in un'istanza di classe URL
. Così perdo le informazioni che in realtà è di classe URL_something.com
.
Avete qualche idea di come posso evitare di perdere che informazioni cruciali?
Esempio di codice
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"
Soluzione
Riprendendo ciò che ha detto Martin (vedi osservazioni di cui sopra):. R 2.14.0 correzioni di quello che ho descritto sopra