1

私は C++ のバックグラウンドから来て、R6 パッケージを使用した R OOP プログラミングにそれを利用しようとしています。
大規模な OOP コードを記述するときは、次の典型的な状況を考慮してください。- いくつかの (場合によっては多くの) 関数を持つクラスがあり、それぞれが非常に複雑で、コード行が多い場合があります。

# file CTest.R

cTest <- R6Class(
  "CTest", 
  public = list(
    z = 10,
    fDo1 = function() {
      # very long and complex code goes here
      self$z <- self$z*2; self$z
      },
    fDo2 = function() { 
      # another very long and complex code goes here
     print(self) 
    }
  )
) #"CTest"

CTest.R当然のことながら、長くてさまざまな関数をすべて同じ ( ) ファイルに入れたくはありません。
C++ でプログラムする場合、そのようなコードをプログラムする通常の方法は次のとおりです。まず、ファイルで関数を宣言し.h、次に.c複雑な関数ごとにファイルを作成し、そこで関数を定義します。これにより、効率的なソース管理を含め、共同でコードを書くことが可能になります。

だから、私は R で似たようなことをしようとしました: 最初に、上記のコードのように関数を宣言し、次に「実際の長くて複雑な」コードを後でそれに割り当てようとしました (後で別ファイルCTest-Do1.R):

cTest$f <- function() {      
  self$z <- self$z*100000; self$z
}

今、私はそれが動作するかどうかをテストします:

> tt <- cTest$new(); tt; tt$fDo1(); tt
<CTest>
Public:
clone: function (deep = FALSE) 
fDo1: function () 
fDo2: function () 
z: 10
[1] 20
<CTest>
Public:
clone: function (deep = FALSE) 
fDo1: function () 
fDo2: function () 
z: 20

いいえ、違います。- 上記の出力からわかるように、関数は変更されていません。

何かアドバイス?

4

2 に答える 2