Pregunta

En un WebCrawler/Webscraper-setting, me gustaría extender dinámicamente mi clase de referencia base URL Para poder escribir métodos específicos para hosts/dominios respectivos. Solo para ser claro, por dinamicamente Me refiero a algo como "Genere automáticamente las definiciones de clase a medida que se encuentran los nuevos dominios (EG Clase URL_something.com que heredaría de clase URL)".

Funciona un regalo, el único problema es que mi clase WebPage espera el valor del campo url ser de clase URL. Aceptará objetos de clase URL_something.com Como esto hereda de clase URL, pero luego convierte el objeto en una instancia de clase URL. Así que pierdo la información de que en realidad es de clase URL_something.com.

¿Tiene alguna idea de cómo puedo evitar perder esa información crucial?

Ejemplo de código

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"
¿Fue útil?

Solución

Recogiendo lo que dijo Martin (ver los comentarios anteriores): R 2.14.0 arregla lo que describí anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top