直到循环

我们都习惯了 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