根据我阅读Hadley 关于构建 S3 对象的建议,我正在使用辅助函数、构造函数和验证器函数。一个简单的可重现示例:
test_object <- function(x, y, z) {
new_test_object(x, y, z)
}
new_test_object <- function(x, y, z) {
structure(list(x = x,
y = y,
z = z,
x_name = deparse(substitute(x))),
class = "test_object")
}
validate_test_object <- function(test_object) {
# Anything goes
test_object
}
我希望生成的对象包含一个带有传入项目的原始名称的值($x_name
在上面的示例中)。如果我直接调用构造函数,这个deparse(substitute(...))
技巧就有效:
alpha = "a"
test_constructor <- new_test_object(x = alpha, y = "b", z = "c")
test_constructor$x_name
# [1] "alpha"
但如果我使用辅助函数则不是:
test_helper <- test_object(x = alpha, y = "b", z = "c")
test_helper$x_name
# [1] "x"
我也想test_helper$x_name
退货[1] "alpha"
。
如果没有在帮助器阶段执行该deparse(substitute(...))
步骤,构造函数 ( )是否可以通过帮助器new_test_object()
访问对象的“原始”名称?x
或者确保它的名称随着辅助函数传递给构造函数而传递?