【发布时间】:2013-04-21 07:10:13
【问题描述】:
假设我们在 R 包中有这个函数。
prova <- function() {
print(attr(prova, 'myattr'))
print(myattr(prova))
invisible(TRUE)
}
'myattr<-' <- function(x, value) {
attr(x, 'myattr') <- value
x
}
myattr <- function(x) attr(x, 'myattr')
所以,我安装了软件包,然后进行了测试。结果如下:
prova()
# NULL
# NULL
myattr(prova) <- 'ciao' # setting 'ciao' for 'myattr' attribute
prova()
# NULL
# NULL # Why NULL here ?
myattr(prova)
# [1] "ciao"
attr(prova, 'myattr')
# [1] "ciao"
问题是:如何从自身内部获取函数的属性?
在函数内部,我无法获取它的属性,如示例所示。
我认为解决方案将是“语言计算”系列(match.call()[[1L]]、substitute、环境和朋友)。我错了吗?
我认为这里的重点是这个函数在一个包中(所以,它有它的环境和命名空间),我需要它自身的属性,在包裹里,不在外面。
【问题讨论】:
-
这可能值得澄清:
getting 属性和printing 属性是两个不同的东西。 -
@RicardoSaporta 我需要验证属性是否存在并获取其值。
标签: r namespaces package environment attr