禁用默认 S4 class 构造函数
Disabling default S4 class constructors
强制始终使用参数创建 S4 对象的最佳方法是什么,这意味着永远不能调用默认构造函数?
我认为用户不想使用 new()
,而是一个您可以为其指定参数/提示并提供文档的函数;理想情况下,用户不知道他们正在使用 'S4 classes',只是调用一些函数,returns 一个他们可以调用其他函数的对象。我的首选方法是
.A = setClass("A", representation=representation(x="numeric"))
A = function(x=numeric(), ...) {
## user-friendly coercion / checks / etc to 'x'
.A(x=x, ...)
}
## accessors and other methods
仅导出包 NAMESPACE 中的 A()
。由于 S4 classes 的隐含要求实际上 validObject(new("A"))
的计算结果为 TRUE(例如,),似乎很难避免允许用户构造 class这样。
创建一个带参数的显式 'initialize' 方法似乎会阻止接受不带参数的新 ('MyType') 调用。看来这就是我要找的解决方案。
强制始终使用参数创建 S4 对象的最佳方法是什么,这意味着永远不能调用默认构造函数?
我认为用户不想使用 new()
,而是一个您可以为其指定参数/提示并提供文档的函数;理想情况下,用户不知道他们正在使用 'S4 classes',只是调用一些函数,returns 一个他们可以调用其他函数的对象。我的首选方法是
.A = setClass("A", representation=representation(x="numeric"))
A = function(x=numeric(), ...) {
## user-friendly coercion / checks / etc to 'x'
.A(x=x, ...)
}
## accessors and other methods
仅导出包 NAMESPACE 中的 A()
。由于 S4 classes 的隐含要求实际上 validObject(new("A"))
的计算结果为 TRUE(例如,
创建一个带参数的显式 'initialize' 方法似乎会阻止接受不带参数的新 ('MyType') 调用。看来这就是我要找的解决方案。