是否有一种方法可以强制R中的函数调用是纯函数?用例:drake
。我想保护调用环境及其祖先不受用户功能的修改。
before <- ls()
f <- function() {
x <<- 1
data("mtcars")
return("abc")
}
output <- pure_function_call(f())
after <- setdiff(ls(), c("before", "f", "output"))
print(before)
print(after)
print(output)
before
和after
必须同意。"x"
和"mtcars"
都必须缺少字符串before
和after
。output
必须等于"abc"
。pure_function_call()
必须在调用测试用例的同一R会话中调用f()
。例如。不允许使用callr::r()
。local(f())
(function(){f()})()