如何在D中实现while循环?

Arl*_*len 5 d while-loop

我知道D已经有了while循环,但由于它的高级功能,我想看看如果在代码中实现while循环会是什么样子.

动机:SO上接受的这个问题的答案.

dsi*_*cha 10

使用延迟函数参数:

void whileLoop(lazy bool cond, void delegate() loopBody) {
Begin:
    if(!cond) return;
    loopBody();
    goto Begin;
}

// Test it out.
void main() {
    import std.stdio;

    int i;
    whileLoop(i < 10, {
        writeln(i);
        i++;
    });
}
Run Code Online (Sandbox Code Playgroud)


rat*_*eak 5

使用带递归的函数:(尾调用将得到优化;))

void whileLoop(bool delegate() cond,void delegate() fun){
    if(cond()){
        fun();
        whileLoop(cond,fun);
    }
}
Run Code Online (Sandbox Code Playgroud)

应该使用闭包

或使用过于过度/未充分利用 goto

startloop:if(!condition)goto endloop;
//code
goto startloop;
endloop:;
Run Code Online (Sandbox Code Playgroud)