如何在D中实现while循环?

发布于 2024-11-19 17:19:21 字数 228 浏览 0 评论 0原文

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

动机:接受的答案 对于这个问题。

I know D already has while loop, but because of its advanced features I would like to see what it would look like if while loop was implemented in code.

motivation: the accepted answer to this question on SO.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长发绾君心 2024-11-26 17:19:21

使用惰性函数参数:

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++;
    });
}

Using lazy function parameters:

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++;
    });
}
浪推晚风 2024-11-26 17:19:21

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

void whileLoop(bool delegate() cond,void delegate() fun){
    if(cond()){
        fun();
        whileLoop(cond,fun);
    }
}

闭包应该与此一起使用

,或者使用过度/未充分使用的goto

startloop:if(!condition)goto endloop;
//code
goto startloop;
endloop:;

using a function with recursion: (tail call will get optimized ;) )

void whileLoop(bool delegate() cond,void delegate() fun){
    if(cond()){
        fun();
        whileLoop(cond,fun);
    }
}

closures should be used with that

or using the ever so over-/underused goto

startloop:if(!condition)goto endloop;
//code
goto startloop;
endloop:;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文