直到迴圈

我們都習慣了 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