如何终止在 BEGIN 块中启动的循环?

Jim*_*ger 9 splash-screen progress-bar raku

我想在应用程序加载/初始化时显示进度条。

该代码不起作用,但应该让您了解我想要完成的任务。

my Bool $done-compiling = False;
BEGIN {
    start repeat {
        print '*';
        sleep 0.33;
    } until $done-compiling;
};

INIT {
    $done-compiling = True;
};
Run Code Online (Sandbox Code Playgroud)

是否触发了我可以在 BEGIN 块中响应的事件?

rai*_*iph 7

Liz 根据您编写的代码提供了解决方案,修复了原始代码中的错误。

这是一个更简单的版本:

BEGIN start repeat { print '*'; sleep 0.33 } until INIT True
Run Code Online (Sandbox Code Playgroud)

(您可能会认为INIT True这是一些特殊功能,但它只是从返回值的移相器的工作方式中自然而然地体现出来。)


Eli*_*sen 6

我认为代码没问题。如果你模拟加载,你会看到一个带有 * 的进度条:

my Bool $done-compiling;
BEGIN {
    start repeat {
        print '*';
        sleep 0.33;
    } until $done-compiling;
}

BEGIN sleep 3; # simulate compilation / loading

INIT $done-compiling = True;
Run Code Online (Sandbox Code Playgroud)

在块中设置标志INIT应该足够了!我想您可以将INIT块的执行视为您正在寻找的事件?