枚舉類型
Set 生成的枚舉類型 枚舉類型可以與類型規范一起使用,但可以通過將它們分類為類或定義修復程序來定義進一步的方法
具有枚舉類型的部分類型系統稱為枚舉部分類型
Bool = {True, False}
Status = {"ok", "error"}
由于 1..7
可以重寫為 {1, 2, 3, 4, 5, 6, 7}
,所以當元素是有限的時,Enum 類型本質上等同于 Range 類型
Binary! = Class {0, 1}!.
invert! ref! self =
if! self == 0:
do!:
self.set! 1
do!:
self.set! 0
b = Binary!.new !0
b.invert!()
順便說一下,Erg 的 Enum 類型是一個包含其他語言中常見的枚舉類型的概念
#![allow(unused)] fn main() { // Rust enum Status { Ok, Error } }
# Erg
Status = {"Ok", "Error"}
Rust 的不同之處在于它使用了結構子類型(SST)
#![allow(unused)] fn main() { // Status 和 ExtraStatus 之間沒有關系 enum Status { Ok, Error } enum ExtraStatus { Ok, Error, Unknown } // 可實施的方法 impl Status { // ... } impl ExtraStatus { // ... } }
# Status > ExtraStatus,Status的元素可以使用ExtraStatus的方法
Status = Trait {"Ok", "Error"}
# ...
ExtraStatus = Trait {"Ok", "Error", "Unknown"}
# ...
方法也可以通過補丁添加
使用"或"運算符明確指示包含或向現有 Enum 類型添加選項
ExtraStatus = Status or {"Unknown"}
一個元素所屬的所有類都相同的枚舉類型稱為同質枚舉類型
默認情況下,可以將需求類型為同類枚舉類型的類視為元素所屬類的子類
如果您不想這樣做,可以將其設為包裝類
Abc = Class {"A", "B", "C"}
Abc.new("A").is_uppercase()
OpaqueAbc = Class {inner = {"A", "B", "C"}}.
new inner: {"A", "B", "C"} = Self.new {inner;}
OpaqueAbc.new("A").is_uppercase() # 類型錯誤