Case语句
另一个分支的方法是case语句。case语句是多分支:
- let name = readLine(stdin)
- case name
- of "":
- echo "Poor soul, you lost your name?"
- of "name":
- echo "Very funny, your name is name."
- of "Dave", "Frank":
- echo "Cool name!"
- else:
- echo "Hi, ", name, "!"
可以看出,对于分支允许使用逗号分隔的值列表。
case语句可以处理整型、其它序数类型和字符串。(序数类型后面会讲到) 对整型或序数类型值,也可以用范围:
- # 这段语句将会在后面解释:
- from strutils import parseInt
- echo "A number please: "
- let n = parseInt(readLine(stdin))
- case n
- of 0..2, 4..7: echo "The number is in the set: {0, 1, 2, 4, 5, 6, 7}"
- of 3, 8: echo "The number is 3 or 8"
上面的代码不能编译: 原因是你必须覆盖每个 n 可能包含的值,但代码里只处理了 0..8 。 因为列出来每个可能的值不现实(尽管范围可以实现),我们通过告诉编译器不处理其它值来修复:
- ...
- case n
- of 0..2, 4..7: echo "The number is in the set: {0, 1, 2, 4, 5, 6, 7}"
- of 3, 8: echo "The number is 3 or 8"
- else: discard
空 discard语句 是一个 什么都不做 的语句。编译器知道带有else部分的case语句不会失败,因此错误消失。 请注意,不可能覆盖所有可能的字符串值:这就是字符串情况总是需要else分支的原因。
通常情况下,case语句用于枚举的子范围类型,其中编译器对检查您是否覆盖了任何可能的值有很大帮助。