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"
War es hilfreich?

Lösung

Das Aufnehmen dessen, was Martin gesagt hat (siehe Kommentare oben): R 2.14.0 behebt das, was ich oben beschrieben habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top