bri*_*foy 7 perl6 dynamic-scope lexical-scope
我正在寻找并在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();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这种使用my很奇怪,这导致了文档问题#1082,如果my实际上是词汇,那就傻笑了.我原以为这temp对于动态变量的用户级临时更改更合适.
但是现在,我看到了这个评论,但我不太清楚这意味着什么.被temp打破这么深?这里没有吗?或者评论错了吗?
如果评论是正确的,那么这种处理动态变量的方式是否已经泄露到日常程序员级别,因为这是一些人必须做的事情(他们习惯了吗?)
而且,这个级别真的有多低?似乎所有的Perl 6都应该可以在这里找到.
如果是这样的话,源代码中的注释可能会减少误解:
# temp $*CWD doesn't work in core settings (which we're in)
# my $*CWD = ... is a decent workaround in this case :)
Run Code Online (Sandbox Code Playgroud)
似乎所有的Perl 6都应该可以在这里找到.
完整的Perl 6必须等到完成Perl 6 CORE设置的编译之后.这对应于Rakudo Perl 6编译器的"核心"src树.这包括"#temp在核心设置中不起作用的代码 :-("注释.