在里面查看一个curry函数(反向currying?)

rim*_*rob 4 functional-programming r currying

假设我有

library(functional)
f = function(x, p) { x^p }
f2 = Curry(f, p=2)
Run Code Online (Sandbox Code Playgroud)

有没有办法找出什么p设置只给f2?

42-*_*42- 5

看看这是否有用.本质上,p参数是在Curry()体的环境中进行的 - ied函数:

> 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
Run Code Online (Sandbox Code Playgroud)

正如BrodieG的评论,这些可以用于对问题的编程攻击:

> environment(f2)$.orig
$p
[1] 2

> environment(f2)$.orig$p
[1] 2
Run Code Online (Sandbox Code Playgroud)

为什么我没有偶然发现最初的比较:

> ls( envir=environment(f2) )
[1] "FUN"
> ls( envir=environment(f2) ,all.names=TRUE)
[1] "..."   ".orig" "FUN"  
Run Code Online (Sandbox Code Playgroud)

ls除非all.names参数设置为,否则该功能仅显示初始字符不是"点"的项目TRUE.

所以这也是具有感知力的:

> environment(f2) $FUN
function(x, p) { x^p }
Run Code Online (Sandbox Code Playgroud)