case 语句类似于if语句,但它表示多分支选择。
如果该值不在任何给定的 slicelist 中,则执行 else 部分。 如果没有 else 部分而且 expr 可以保持在 slicelist 中的所有可能值,则会发生静态错误。 这仅适用于序数类型的表达式。 expr 的“所有可能的值”由 expr 的类型决定。 为了阻止静态错误,应该使用带有空 discard 语句的 else 部分。
因为在语义分析期间检查case语句的详尽性,所以每个 of 分支中的值必须是常量表达式。 此限制还允许编译器生成更高性能的代码。
- const
- SymChars: set[char] = {'a'..'z', 'A'..'Z', '\x80'..'\xFF'}
- proc classify(s: string) =
- of SymChars, '_': echo "an identifier"
- of '0'..'9': echo "a number"
- else: echo "other"
- proc classify(s: string) =
- case s[0]
- of 'a'..'z', 'A'..'Z', '\x80'..'\xFF', '_': echo "an identifier"
- of '0'..'9': echo "a number"