한 가지 가능성은 메소드 디스패치 후 리턴 유형의 값을 확인하는 것입니다.
setGeneric("getScalar", function(x, ...) {
value <- standardGeneric("getScalar")
if (!is.atomic(value) || length(value) != 1L)
stop("not a scalar atomic vector")
value
})
setMethod(getScalar, "ANY", function(x, ...) x)
또 다른 가능성은 제약 조건을 시행하는 기본 클래스에 대한 유효성 검사와 함께 '스칼라'클래스를 정의하는 것입니다.
.Scalar <- setClass("Scalar", contains="ANY", validity=function(object) {
if (length(object) != 1L)
"non-scalar object"
else TRUE
}, prototype=NA)
또는 가상 클래스를 기반으로 작은 계층 구조로 스칼라 유형을 더 강력하게 제어
setClass("Scalar", validity=function(object) {
if (length(object) != 1L)
"non-scalar object"
else TRUE
})
.ScalarInteger <- setClass("ScalarInteger",
contains=c("Scalar", "integer"),
prototype=prototype(NA_integer_))