7

我正在查看并在indir实现中看到此评论:

sub indir(Str() $path, $what, :$test = <r w>) {
    my $newCWD := $*CWD.chdir($path,:$test);
    $newCWD // $newCWD.throw;

    {
        my $*CWD = $newCWD;  # temp doesn't work in core settings :-(
        $what();
    }
}

我认为这种用法my很奇怪,这导致了doc issue #1082对 ifmy实际上是词法的问题感到厌烦。我原以为这temp更适合用户级对动态变量的临时更改。

但是现在,我看到了这个评论,但我不太确定它是什么意思。temp破的这么深?在这里不可用吗?还是评论是错误的?

如果评论是正确的,那么这种处理动态变量的方式是否会泄露到日常程序员级别,因为这是某些人不得不做的事情(他们已经习惯了?)

而且,这个级别到底有多低?似乎所有 Perl 6 都应该在这里可用。

4

2 回答 2

5

如果源代码中的注释是:

# temp $*CWD doesn't work in core settings (which we're in)
# my $*CWD = ... is a decent workaround in this case :)

似乎所有 Perl 6 都应该在这里可用。

完整的 Perl 6 必须等到 Perl 6 CORE 设置编译完成之后。这对应于Rakudo Perl 6 编译器的“核心”src 树。这包括带有“# temp 在核心设置中不起作用:-(”注释的代码。

于 2016-12-31T22:41:43.677 回答
2

强调@raiph 的观点:一般来说,期望在 rakudo 中实现的任何特定 Perl 6 功能在 CORE 中的任何给定点都可以工作是不合理的,因为这就是我们使这些功能可用的方式。

开发核心的开发人员必须意识到这一点,并考虑到这一点,例如,在订购 CORE 的构建方式时,哪些功能在什么时候可用(以及哪些功能在较低级别上性能更高) ,因此您在 CORE 中看到的 Perl 6 可能由于几个不同的原因而不是惯用的。)

于 2017-01-23T15:54:37.173 回答