我來自C++背景,試圖利用它來進行R6包的R OOP編程。
在編寫大型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"
當然,你不想把所有您的長期和各種功能(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