質問

参照クラスメソッドをオーバーライドしようとしています。参照クラスメソッドはオブジェクトではなくクラスにバインドされているため、これを行うには、古い参照クラスから継承する新しい参照クラスを定義する必要があります。しかし、私が継承しようとしているクラスは、外部パッケージで私のもの(DPLYR)を定義します。これを行うために正しい構文を把握できない、CONTAINはテキスト名のみを必要とし、外部パッケージ内のクラス定義を検索しません。

特にDBDisconcectorリファレンスクラスからDPLYRのDBDisconcectorリファレンスクラスを継承し、ファイナイズ方法をオーバーライドしようとしています。

これは親クラスを正しく見つけますが、それは別のパッケージからのものとして割り当てることはできません。

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = 'DbDisconnector',
  methods = list(
    finalize = function() {
      message("test")
    }
  ),
  where=getNamespace('dplyr')
)
# Error in assign(mname, def, where) (from file.r#75) :
#  cannot add bindings to a locked environment
.

メソッドを含むメソッドは文字列を受け入れるだけで、GetRefClassからREFCLASS定義を与えることはできません。

NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = getRefClass("DbDisconnector", getNamespace("dplyr")),
  methods = list(
    finalize = function() {
      message("test")
    }
  )
)
# Error in FUN(X[[1L]], ...) :
#  the 'contains' argument should be the names of superclasses:  got an element of class “name”
.

これが可能だと思います、私はそれをする正しい方法を理解することはできません。

役に立ちましたか?

解決

スーパークラスを環境にインポートできます。

DbDisconnector <- getFromNamespace("DbDisconnector", "dplyr")
.

とクラスのcontains = "DbDisconnector"を設定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top