if 语句
if 语句中,if 部分是必须的,elif 和 else 部分是可选的,elif 可以有多个,else 只能有一个,且只能放到最后(和 python 完全一样…):
let s = "Tom"if s == "Jim":echo "Hello, Jim."echo "Come here."elif s == "Tom":echo "Hi, Tom."echo "Where is Jerry?"else:echo "I dont know you."
上面的代码可以这样写:
if s == "Jim": echo "Hello, Jim.\nCome here."elif s == "Tom": echo "Hi, Tom. \nWhere is Jerry?"else: echo "I dont know you."
case 语句
case 语句对指定值进行判断,如果匹配 of 指定的值,则执行 of 后面的语句:
let name = "Dave"case nameof "":echo "Poor soul, you lost your name?"of "name":echo "Very funny, your name is name."of "Dave", "Frank": # 注意这里,是说如果 name 的值为 "Dave" 或者 "Frank" 时匹配echo "Cool name!"else:echo "Hi, ", name, "!"
case 语句中的 of 分支结尾处不需要 break 或类似的东西,也不会像某些语言中的 switch 语句那样 fall-throught。
case 语句还可以对整数做范围匹配:
case nof 0..2, 4..7: echo "n ∈ [0,2] ∪ [4..7] ∪ Z"of 3, 8: echo "n is 3 or 8"else: discard
如果某个分支不需要执行任何代码,增加一个 discard 语句就好了,就像上面那样。
while 语句
while 语句会不断地做一个逻辑判断,直到值为 false 时结束:
var i = 0while i < 3:echo iinc(i, 1)
如果在执行逻辑内部要结束 while 语句,可以使用 break。
for 语句
for 语句用来遍历迭代器提供的元素。比如:
for i in countup(1, 10)echo i # 打印 1 - 10for i in countdown(10, 1)echo i # 打印 10 - 1
for 语句中可以是用 .. 迭代器。比如下面几个 for 循环等价:
for i in countup(1, 10)# omittedfor i in 1..10:# omittedfor i in 1..<11:# omitted
遍历列表时,可以这样:
for index, item in ["a","b"].pairs:echo item, " at index ", index
block 语句
block 语句声明了一个语句块,这个语句块可以带有一个标签,也可以不带:
block myblock:echo "myblock"block:echo "another block"
break 语句
break 语句可以用于调出当前循环。如果 break 语句后面带上语句块标签,则会直接跳到语句块开始处开始执行代码,类似于 goto。
continue 语句
continue 语句用于跳过本次循环剩余的执行逻辑。
when 语句
例如:
when system.hostOS == "windows":echo "running on Windows!"elif system.hostOS == "linux":echo "running on Linux!"elif system.hostOS == "macosx":echo "running on Mac OS X!"else:echo "unknown operating system"
when 语句和 if 语句很像,但是有几处不同:
- 每个条件都必须是常量表达式,因为它由编译器在编译时计算
when语句的每个分支都不开新的作用域- 编译器只对条件值为
true的分支生成可执行代码
是不是有点宏的味道?
