如何用解析变量打印函数体

qoh*_*eth 6 functional-programming r

假设我有一个函数,它接受一些参数k并返回另一个带参数nk在函数体中使用的函数.

makeFn <- function(k) {
  function(n){
    rep(k,n)
  }
}

five <- makeFn(5)

five(3)
# [1] 5 5 5

body(five)
# {
#    rep(k, n)
# }
Run Code Online (Sandbox Code Playgroud)

我怎样才能打印出five它所显示的身体rep(5,n)而不是rep(k,n)

day*_*yne 1

一种选择是将eval和结合起来bquote

makeFn <- function(k) {
  eval(bquote(function(n) rep(.(k),n)))
}

five <- makeFn(5)
body(five)
# rep(5, n)
Run Code Online (Sandbox Code Playgroud)

.()符号告诉bquote我们计算括号中的内容,然后将结果包含在表达式中。