So steuern Sie die Vererbung bei dynamischer Erweiterung der Referenzklassen
-
26-10-2019 - |
Frage
In einem Webcrawler/Webcraper-Setting möchte ich meine Basisreferenzklasse dynamisch erweitern URL
Um bestimmte Methoden für jeweilige Hosts/Domänen schreiben zu können. Nur um klar zu sein, von dynamisch Ich meine so etwas wie "Generieren Sie automatisch Klassendefinitionen, wenn neue Domänen auftreten (zB Klasse URL_something.com
das würde vom Unterricht erben würden URL
)".
Arbeitet eine Belohnung, das einzige Problem ist, dass meine Klasse WebPage
erwartet den Wert des Feldes url
Klasse sein URL
. Es akzeptiert Objekte der Klasse URL_something.com
Da diese die Klasse erbt URL
, aber dann verwandelt das Objekt tatsächlich in eine Instanz der Klasse URL
. Also verliere ich die Informationen, dass es sich tatsächlich um den Unterricht handelt URL_something.com
.
Haben Sie eine Vorstellung davon, wie ich verhindern kann, dass ich diese entscheidenden Informationen verlieren kann?
Codebeispiel
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"
Lösung
Das Aufnehmen dessen, was Martin gesagt hat (siehe Kommentare oben): R 2.14.0 behebt das, was ich oben beschrieben habe.