代码之家  ›  专栏  ›  技术社区  ›  landau

强制R函数调用为纯函数

  •  1
  • landau  · 技术社区  · 7 年前

    问题

    有没有办法强制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" 两者都必须缺席 之前 和 之后 .
    • output 必须相等 "abc" .
    • pure_function_call() 必须打电话 f() 在调用测试用例的同一个R会话中。例如。 callr::r() 这是不允许的。

    失败的尝试

    • local(f())
    • (function(){f()})()
    0 回复  |  直到 7 年前