查看 R 中的柯里化函数(反向柯里化?)
Looking inside a curried function in R (reverse currying?)
假设我有
library(functional)
f = function(x, p) { x^p }
f2 = Curry(f, p=2)
有没有办法找出只给定 f2 的 p 设置的值?
看看有没有用。本质上,p 参数是在 Curry() 函数体的环境中携带的:
> body(f2)
do.call(FUN, c(.orig, list(...)))
> body(f2)[[1]]
do.call
> body(f2)[[3]]
c(.orig, list(...))
> body(f2)[[3]][[2]]
.orig
> eval(body(f2)[[3]][[2]])
Error in eval(expr, envir, enclos) : object '.orig' not found
> eval(body(f2)[[3]][[2]], environment(f2) )
$p
[1] 2
正如 BrodieG 评论的那样,这些可以用于对问题的编程攻击:
> environment(f2)$.orig
$p
[1] 2
> environment(f2)$.orig$p
[1] 2
要了解为什么我最初没有偶然发现比较:
> ls( envir=environment(f2) )
[1] "FUN"
> ls( envir=environment(f2) ,all.names=TRUE)
[1] "..." ".orig" "FUN"
ls
函数只显示首字符不是"dots"的项目,除非all.names
参数设置为TRUE
。
所以这也很重要:
> environment(f2) $FUN
function(x, p) { x^p }
假设我有
library(functional)
f = function(x, p) { x^p }
f2 = Curry(f, p=2)
有没有办法找出只给定 f2 的 p 设置的值?
看看有没有用。本质上,p 参数是在 Curry() 函数体的环境中携带的:
> body(f2)
do.call(FUN, c(.orig, list(...)))
> body(f2)[[1]]
do.call
> body(f2)[[3]]
c(.orig, list(...))
> body(f2)[[3]][[2]]
.orig
> eval(body(f2)[[3]][[2]])
Error in eval(expr, envir, enclos) : object '.orig' not found
> eval(body(f2)[[3]][[2]], environment(f2) )
$p
[1] 2
正如 BrodieG 评论的那样,这些可以用于对问题的编程攻击:
> environment(f2)$.orig
$p
[1] 2
> environment(f2)$.orig$p
[1] 2
要了解为什么我最初没有偶然发现比较:
> ls( envir=environment(f2) )
[1] "FUN"
> ls( envir=environment(f2) ,all.names=TRUE)
[1] "..." ".orig" "FUN"
ls
函数只显示首字符不是"dots"的项目,除非all.names
参数设置为TRUE
。
所以这也很重要:
> environment(f2) $FUN
function(x, p) { x^p }