美思 [Nim] 語言程式教學:列舉 (Enum)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

列舉 (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
關於作者

身為資訊領域碩士,美思認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

美思喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,美思將所學寫成文章,放在這個網站上和大家分享。