禁用默认的S4类构造函数

时间:2015-01-02 17:17:33

标签: r s4

强制执行S4对象总是使用参数创建的最佳方法是什么,这意味着永远不能调用默认构造函数?

2 个答案:

答案 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')调用。这似乎是我正在寻找的解决方案。