Nim 語言程式教學:列舉 (Enum)

PUBLISHED ON MAR 7, 2018 — PROGRAMMING

    列舉 (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
    
    comments powered by Disqus