直到循环
我们都习惯了 while
语法,它会在条件被评估为 true
时执行它的主体。如果我们想要实现一个 until
循环,执行一个循环直到条件被评估为 true
怎么办?
在 Julia 中,我们可以通过创建一个 @until
宏来执行此操作,该宏在满足条件时停止执行其主体:
macro until(condition, expression)
quote
while !($condition)
$expression
end
end |> esc
end
这里我们使用了函数链接语法|>
,它相当于在整个 quote
块上调用 esc
函数。esc
函数可以防止宏卫生应用于宏的内容; 如果没有它,宏中的变量范围将被重命名,以防止与外部变量发生冲突。有关详细信息,请参阅有关宏观卫生的 Julia 文档。
你可以在此循环中使用多个表达式,只需将所有内容放在 begin ... end
块中:
julia> i = 0;
julia> @until i == 10 begin
println(i)
i += 1
end
0
1
2
3
4
5
6
7
8
9
julia> i
10