URL
webcrawler/webscraper 設定で、それぞれのホスト/ドメインに固有のメソッドを記述できるように、基本参照クラスを動的に拡張したいと考えています。明確にするために、動的とは、「新しいドメインが検出されたときにクラス定義を自動的に生成する(たとえば、クラスURL_something.com
から継承するクラスURL
)」のようなものを意味します。
唯一の問題は、私のクラスWebPage
が field の値が class であることを期待しているurl
ことですURL
。URL_something.com
これは classから継承されるため、 class のオブジェクトを受け入れますURL
が、実際にはオブジェクトを class のインスタンスに変換しますURL
。そのため、実際に class であるという情報を失いURL_something.com
ます。
その重要な情報が失われないようにする方法を知っていますか?
コード例
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"