Предположим, у меня естьЗаглянув каррированной функции в R (реверс выделки?)
library(functional)
f = function(x, p) { x^p }
f2 = Curry(f, p=2)
Есть ли способ, чтобы выяснить, что р был установлен в данной только f2?
Предположим, у меня естьЗаглянув каррированной функции в R (реверс выделки?)
library(functional)
f = function(x, p) { x^p }
f2 = Curry(f, p=2)
Есть ли способ, чтобы выяснить, что р был установлен в данной только f2?
Посмотрите, полезно ли это. По существу, р аргумент выполняется в среде тела Карри() - 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
В комментариях 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
функция отображает только элементы, для которых начальных символов не является не «точкой», если all.names
параметр установлен на TRUE
.
Так что это также imformative:
> environment(f2) $FUN
function(x, p) { x^p }
Спасибо, @BondedDust! – rimorob
'environment (f2) $. Оригинал немного проще. – BrodieG
Согласитесь, что это более элегантно. Возможно, в отличие от вас, я не знал ответа, когда начинал, и показывал путь, по которому я путешествовал, чтобы получить ответ. Я был разочарован в отношении этого подхода, когда пытался: 'ls (environment (f2)) # [1]" FUN "'. 'ls.str' и' lsf.str' также были неподтверждающими. –