1

参照クラス コンストラクターに参照クラスを渡し、渡された参照クラスをフィールドとして割り当てたいと考えています。ただし、以下のコードを実行すると、エラーが発生する理由がわかりません。私の質問は次のとおりです。

1) このエラーが発生する理由を誰かが親切に説明してください:

> a <- ClassA&new()
Error in .getClassFromCache(Class, where) : 
  argument "Class" is missing, with no default
> b <- ClassB$new(a)
Error in .Object$initialize(...) : object 'a' not found

2) class.a.containerをクラス "list" として宣言しましたが、これを参照クラスにしたいと考えています。「リスト」の代わりにここに何を入れる必要がありますか?

ClassA <- setRefClass(
  "ClassA",

  fields = list(myVar = "numeric"),

  methods = list(
    someMethod = function(){
      print("hi")
    }
  )
)

ClassB <- setRefClass(
  "ClassB",

  fields = list(class.a.container = "list"),

  methods = list(
    initialize = function(class.a){
      class.a.container <<- class.a
  })
)

a <- ClassA&new()
b <- ClassB$new(a)
4

2 に答える 2

5

少なくとも私が問題に気付いたときはそうでした。環境クラス項目からの抽出で、ドル記号の前にアンパサンドがあります。

a <- ClassA$new(myVar=1)
a$someMethod(2)
#[1] "hi
于 2012-10-31T21:47:16.190 に答える
1

42- は、あなたのコード ($ ではなく &) の 1 つのエラーを既に指摘しています。

元の質問に完全に答えるために、そのバグを修正した後、 ClassB のフィールドの宣言をから変更する必要があることを明示的に指摘したいだけです

class.a.container = "list"

class.a.container = "ClassA"

ここに私のために働く完全なコードがあります:

ClassA = setRefClass(
    Class = "ClassA",

    fields = list(myVar = "numeric"),

    methods = list(
        someMethod = function() {
            print("hi")
        }
    )
)

ClassB = setRefClass(
    Class = "ClassB",

    fields = list(class.a.container = "ClassA"),

    methods = list(
        initialize = function(class.a) {
            class.a.container <<- class.a
        }
    )
)

a = ClassA$new(myVar = 1)
a

b = ClassB$new(a)
b

それは印刷します:

...
> a
Reference class object of class "ClassA"
Field "myVar":
[1] 1
> 
> b = ClassB$new(a)
> b
Reference class object of class "ClassB"
Field "class.a.container":
Reference class object of class "ClassA"
Field "myVar":
[1] 1
于 2016-12-01T14:53:42.920 に答える