case 语句类似于if语句,但它表示多分支选择。

    如果该值不在任何给定的 slicelist 中,则执行 else 部分。 如果没有 else 部分而且 expr 可以保持在 slicelist 中的所有可能值,则会发生静态错误。 这仅适用于序数类型的表达式。 expr 的“所有可能的值”由 expr 的类型决定。 为了阻止静态错误,应该使用带有空 discard 语句的 else 部分。

    因为在语义分析期间检查case语句的详尽性,所以每个 of 分支中的值必须是常量表达式。 此限制还允许编译器生成更高性能的代码。

    1. const
    2. SymChars: set[char] = {'a'..'z', 'A'..'Z', '\x80'..'\xFF'}
    3.  
    4. proc classify(s: string) =
    5. of SymChars, '_': echo "an identifier"
    6. of '0'..'9': echo "a number"
    7. else: echo "other"
    8.  
    9. proc classify(s: string) =
    10. case s[0]
    11. of 'a'..'z', 'A'..'Z', '\x80'..'\xFF', '_': echo "an identifier"
    12. of '0'..'9': echo "a number"