为什么在使用“will leave”时会出现“名称为‘$x’的词法不存在于此框架中”?

Why do I get “Lexical with name '$x' does not exist in this frame” when using “will leave”?

我有以下 Raku 代码:

class Thing {
    method close {
        say "closed";
    }
};

for 1..1000 {
    my $x will leave { .close } = Thing.new;
}

运行它,我得到错误:

Lexical with name '$x' does not exist in this frame
  in block <unit> at c.raku line 7

有趣的是,只有迭代次数足够多时才会发生这种情况(500 或 100,我没有收到任何错误消息)。

如果我将循环的主体更改为

my $x = Thing.new;
LEAVE $x.close;

然后一切正常也没有错误。

这里发生了什么?我是否误解了 will leave 结构? (我觉得这两个版本应该是等价的。)

编辑:进一步观察——当运行代码多次时,错误出现不确定。这表明问题在某种程度上与垃圾收集有关,但我仍然对这里实际发生的事情感到困惑。

我正在使用 Rakudo v2021.03。

这是一个错误。已经为它做了一个issue:https://github.com/rakudo/rakudo/issues/4403

我建议同时使用解决方法。