列舉 (enum 或 enumeration) 是一種特化的型別,該型別的值僅有少數幾個值,像是星期 (week) 只有星期一到星期日共七個值,而月份 (month) 僅有一月到十二月共 12 個值。在一些沒有列舉的語言,像是 Go 或 Perl,使用常數來代替列舉;但使用列舉較好,因為編輯器可透過列舉進行型別檢查,而常數沒有型別安全的優點。
以下實例建立一個 Size
列舉:
type
Size = enum
szSmall, szMedium, szLarge, szXLarge, szXXLarge
let s = szLarge
assert(s == szLarge)
由於 Nim 的列舉在呼叫時,不需要前綴型別資訊,像 Size.szSmall
這種呼叫會顯得有點冗餘,Nim 社群的習慣是在𣐀舉前加一個前綴字。
如果不習慣這種方式,也可以建立一個純列舉 (pure enum),這時候就一定要用 Size.Small
這種方式來呼叫。實例如下:
type
Size {.pure.} = enum
Small, Medium, Large, XLarge, XXLarge
let s = Size.Large
assert(s == Size.Large)
一般來說,我們在建立列舉時,不會在意其內部的值,而只是指列舉當成一種符號。若要指定列舉內部的值,Nim 也支援這項特性,如下:
type
MyEnum = enum
a = 2, b = 4, c = 89