说我有一个定义如下的类:
setClass("myclass", slots = list(id="character"))
我希望事情是这样的,ID是强制性的,myclass
没有ID是无效的对象。目前,我得到以下信息:
> new("myclass")
An object of class "myclass"
Slot "id":
character(0)
我希望设置验证功能会有所帮助:
setValidity("myclass", function(object){
if(length(slot(object, "id")) == 0L){
return("You cannot do that")
}
return(TRUE)
})
> new("myclass")
An object of class "myclass"
Slot "id":
character(0)
但不幸的是,似乎具有空参数会导致绕过验证功能。有没有办法使这种类型的输入无效?
我能找到的最佳解决方案是将验证步骤放入构造函数中(这对我来说似乎有点不对劲):
setMethod("initialize", "myclass", function(.Object, id){
if(missing(id)) stop("The id is not allowed to be empty")
.Object@id <- id
validObject(.Object)
return(.Object)
})
现在可以得到预期的结果:
> new("myclass")
Error in .local(.Object, ...) : The id is not allowed to be empty
> new("myclass", id = character())
Error in validObject(.Object) :
invalid class “myclass” object: You cannot do that
> new("myclass", id = "a")
An object of class "myclass"
Slot "id":
[1] "a"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句