【发布时间】:2023-04-01 17:29:01
【问题描述】:
根据我对Hadley's advice on building S3 objects 的阅读,我正在使用辅助函数、构造函数和验证器函数。一个简单的可重现示例:
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 的“原始”名称?或者确保它的名字随着辅助函数传递给构造函数而传递?
【问题讨论】: