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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。