fa <- function(x){x+1}
fb <- function(x){x-1}
f1 <- function(x, y){f(x)^y}
f2 <- function(x, ab, y){
if(ab == 'a'){
f <- fa
} else {
f <- fb
}
f1(x, y)
}
f2(0, 'a', .5)
Error in f1(x, y) : could not find function "f"
因爲f
不f1
的環境中定義的上述不起作用。功能無法「看到」在全球環境中定義等功能
什麼是使這項工作的好方法?這
- 避免了在全球環境中通過一切
f2
的環境 - 避免了重新定義函數內
f2
(這將是一個麻煩,並創建複製/粘貼錯誤的機會)
定義某種「子全局」環境是否有意義,並將我希望每個人都在此環境中使用的東西放在一起,然後讓每個函數都能夠訪問「子全局」中的東西?然後以某種方式確保subglobal始終是全球的一個嚴格子集?如果明智的話,我會如何做到這一點?
一個讓所有東西都能正常工作的黑客修復,可以在調用'f2'內的'f1'之前在'line'使用'environment(f1)= environment()',因爲'f1'在'f' '環境(F1)'。順便說一下,全局'f1'不會受到'f2'中的這種改變的影響。儘管我同意康拉德的觀點,不管是將明確的職能作爲論據,還是採用類別制度,如果方便的話。 –