强制执行S4对象总是使用参数创建的最佳方法是什么,这意味着永远不能调用默认构造函数?
答案 0 :(得分:1)
我认为用户不想使用new()
,而是一个可以指定参数/提示并提供文档的函数;理想情况下,用户并不认为他们正在使用'S4类',只是调用一些函数来返回一个可以调用其他函数的对象。我的首选方法是
.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类的隐含要求实际上validObject(new("A"))
求值为TRUE(例如from earlier today),因此似乎很难避免允许用户以这种方式构造类。
答案 1 :(得分:0)
看起来创建一个带有参数的显式“初始化”方法可以防止在没有参数的情况下接受新的('MyType')调用。这似乎是我正在寻找的解决方案。