setClassUnion
位于 methods
包(package)。 说明
一个类可以被定义为其他类的联合;也就是说,作为一个虚拟类,定义为几个其他类的超类。当我们想要允许提供多个类之一时,类联合在方法签名中或作为其他类中的槽非常有用。
用法
setClassUnion(name, members, where)
isClassUnion(Class)
参数
name |
新联合类的名称。 |
members |
应成为该联合成员的类的名称。 |
where |
保存新类定义的位置。在从包的源代码调用时,应省略将定义保存在包的命名空间中。 |
Class |
类的名称或定义。 |
细节
members
中的类必须在创建联合之前定义。但是,可以稍后将成员添加到现有联合,如下例所示。阶级工会可以是其他阶级工会的成员。
类联合是创建其定义被密封的类的新超类的唯一方法。加载包时,所有包的命名空间都会被密封,从而保护类和其他定义不被另一个类或全局环境覆盖。例如,尝试为类 "numeric"
定义新超类的对 setIs
的调用将导致错误。
阶级工会是个例外。示例中的类联合 "maybeNumber"
将自身定义为 "numeric"
的新超类。从技术上讲,它不会更改其他包的命名空间中的元数据对象,当然,类联合的效果取决于加载它所属的包。但本质上,阶级工会足以证明豁免的合理性。
类联合的不同行为之所以成为可能,是因为类联合的类定义对象本身有一个特殊的类 "ClassUnionRepresentation"
,它是类 classRepresentation
的扩展。
例子
## a class for either numeric or logical data
setClassUnion("maybeNumber", c("numeric", "logical"))
## use the union as the data part of another class
setClass("withId", contains = "maybeNumber", slots = c(id = "character"))
w1 <- new("withId", 1:10, id = "test 1")
w2 <- new("withId", sqrt(w1)%%1 < .01, id = "Perfect squares")
## add class "complex" to the union "maybeNumber"
setIs("complex", "maybeNumber")
w3 <- new("withId", complex(real = 1:10, imaginary = sqrt(1:10)))
## a class union containing the existing class union "OptionalFunction"
setClassUnion("maybeCode",
c("expression", "language", "OptionalFunction"))
is(quote(sqrt(1:10)), "maybeCode") ## TRUE
参考
Chambers, John M. (2016) Extending R, Chapman & Hall. (Chapters 9 and 10.)
相关用法
- R setClass 创建类定义
- R setOldClass 注册旧式 (S3) 类和继承
- R setGroupGeneric 创建函数的组通用版本
- R setGeneric 创建函数的通用版本
- R setAs 将对象强制为类的方法
- R setMethod 创建并保存方法
- R setIs 显式指定超类
- R setLoadActions 设置包加载操作
- R selectSuperClasses 类的超类(特定类型)
- R showMethods 显示指定函数或类的所有方法
- R slot 正式类对象中的槽
- R show 显示对象
- R as 强制对象属于某个类
- R language-class 表示未评估语言对象的类
- R className 类名包含对应的包
- R BasicClasses 基本数据类型对应的类
- R callGeneric 从方法调用当前通用函数
- R findClass 查找类定义
- R ReferenceClasses 具有按引用处理的字段的对象(OOP 样式)
- R MethodsList 方法列表对象
- R StructureClasses 基本结构对应的类
- R getMethod 获取或测试方法的定义
- R S4groupGeneric S4组通用函数
- R methodUtilities 用于方法和 S-Plus 兼容性的实用函数
- R getClass 获取类定义
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Classes Defined as the Union of Other Classes。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。