私はC++のバックグラウンドから来て、R6パッケージを使ったROPプログラミングのために使っています。
大きなOOPコードを記述するときは、次の典型的な状況を考慮してください。 - あなたはまた、非常に複雑であってよく、コードの行数とそれぞれのあなたは、いくつかの(おそらく多くの)機能を持っているクラス、持っている:当然R6関数の値を変更することはできますか? (良いスタイルの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"
、あなたはALL入れたくないし同じ(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
いいえ、それは上記の出力からわかるようにnot.-し、機能が変更されていません。
アドバイスはありますか?
https://stackoverflow.com/questions/26331030/dynamically-add-function-to-r6-class-instance –
"C++(Javaなど)でプログラムする場合、そのようなコードをプログラミングする通常の方法は次のとおりです。 .hファイルで関数を宣言した後、関数を定義する複素関数ごとに.cファイルを作成します。これはJavaでは実際には適用されません。実際には、言語が個別のヘッダーファイルと実装ファイルを持つことは一般的ではありません。 – user2357112