代码之家  ›  专栏  ›  技术社区  ›  Stefan Klocke

让内部函数使用外部函数的参数

  •  0
  • Stefan Klocke  · 技术社区  · 8 年前

    我很难找到以下内容:有一个 outer 函数,其中 inner 函数被调用。这个 内部的 函数是递归的。这两个函数都有一些共同的参数 a ,则, b ,则, c ,因为我想要 外面的 函数将这些参数传递给 内部的 A. ,则, B ,则, C 基本上是选项参数 内部的 ,需要从外部访问。

    彻底简化的版本可能如下所示

    inner <- function(a, b, c, d, i = 0) {
      # Something
      inner(a = left, b = right, c, d, i = i + 1)
    }
    
    outer <- function(a, b, c, r, t) {
      d <- r^2
      inner(a = a, b = b, c = c, d = d)
    }
    

    现在 内部的 在…内 外面的 我觉得有点笨重。我想要 A. ,则, B ,则, C 将传递给 内部的 “自动”,而不必再次显式地将它们作为参数传递,因为它们是常量选项参数。键可以是省略号/。。。但不幸的是,我无法找到答案。。。

    非常感谢您的帮助!

    干杯 斯特凡

    2 回复  |  直到 8 年前
        1
  •  3
  •   G. Grothendieck    8 年前

    (1) 在外部函数中定义内部函数,内部函数将访问外部函数的变量。在这里 inner 使用 a 从…起 outer 尽管 A. 未传递给 内部的

    outer <- function(a, x) {
      inner <- function(y) {
        a + y
      }
    
      inner(2 * x)
    }
    
    # test
    outer(10, 100)
    ## [1] 210
    

    (2) 或者,注入 内部的 进入 外面的 像这样:

    inner <- function(y) {
      a + y
    }
    
    outer <- function(a, x) {
      environment(inner) <- environment()    
      inner(2 * x)
    }
    
    # test
    outer(10, 100)
    ## [1] 210
    
        2
  •  1
  •   Melissa Key    8 年前

    另一种方法是编写

    outer <- function(r, t, ...) {
      d <- r^2
      inner(d = d, ...)
    }
    

    传递的值 a ,则, b c outer 将导致这些自动传递给内部函数。这种方法的唯一缺点是从 外面的 值的函数 A. ,则, B C 是必需的。