在嵌套函数中修改变量顺序

Posted

技术标签:

【中文标题】在嵌套函数中修改变量顺序【英文标题】:Modifying variable order within a nested function 【发布时间】:2020-01-29 14:19:51 【问题描述】:

我想对传递给函数的变量的顺序进行变量控制。最好用下面的例子来说明;

假设我们有以下函数,其中两个变量在函数的本地命名空间中定义,并传递给该命名空间内的嵌套函数:

testfunc = function()

  a=1
  b=2

  return(sprintf('first %s, then %s', a,b))

是否可以定义变量ab传递给sprintf的顺序?

大概是这样的:

我的尝试:

testfunc = function(...)

  a=1
  b=2

  return(sprintf('first %s, then %s', ...))


testfunc(...=b,a)

显然,由于语法问题,上述方法不起作用......

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

类似这样的:

test <- function(ord) 
    l <- list(
        a = "x",
        b = "y"
    )
    args <- c(l[ord], fmt = "%s %s")
    do.call(sprintf, args)

test(c(1, 2))
#> [1] "x y"
test(c(2, 1))
#> [1] "y x"
test(c(1, 1))
#> [1] "x x"
test(c(2, 2))
#> [1] "y y"

【讨论】:

以上是关于在嵌套函数中修改变量顺序的主要内容,如果未能解决你的问题,请参考以下文章

无法从 ExtJs 的回调中修改变量

Python全栈__动态参数名称空间作用域作用域链加载顺序函数的嵌套globalnonlocal

承诺按顺序运行嵌套承诺并在第一次拒绝时解决

dplyr 管道中嵌套函数的执行顺序

python函数调用顺序高阶函数嵌套函数闭包详解

类成员的编译顺序之嵌套类型对类的影响