使用R6類時,在調用其他方法的類之外定義方法的正確方法是什麼?定義在R6對象外部調用其他方法的方法
請考慮以下示例,其中函數func
可能調度到另一個函數,如果它正在交互使用。但是,如果這樣做,另一個功能就無法訪問私有環境。如果我以這種方式定義類,我應該傳遞一個環境嗎?
## General function defined outside R6 class
func <- function(x) {
if (missing(x) && interactive()) {
ifunc()
} else {
private$a <- x * x
}
}
## If interactive, redirect to this function
ifunc <- function() {
f <- switch(menu(c('*', '+')), '1'=`*`, '2'=`+`)
private$a <- f(private$a, private$a)
}
## R6 test object
Obj <- R6::R6Class("Obj",
public=list(
initialize=function(a) private$a <- a,
geta=function() private$a,
func=func # defined in another file
),
private=list(
a=NA
)
)
## Testing
tst <- Obj$new(5)
tst$func(3)
tst$geta() # so func sees 'private'
# [1] 9
tst$func() # doesn't see 'private'
錯誤ifunc()(從#3):對象 '私人' 未找到
我認爲包和roo原包將支持你想要的東西:你不必定義類中的所有成員def從頭。但是可能你會失去一些你喜歡R6的功能...... – Sebastian