一旦被调用,访问子程序Capture的语法是什么? self仅适用于对象,
&?ROUTINE
指静态例程,而不是其曾调用的状态.首先,是否可以从内部访问例程的Capture?如果是这样,访问它的语法是什么?我看过
related Synopse但我找不到办法,如果有的话.
解决方法
没有办法完全按照你的要求去做.虽然概念上的参数是通过形成一个包含它们的Capture对象来传递的,然后由签名解包,对于大多数调用,没有Capture真正存在.由于Perl 6中的每个操作符都是多调度子例程调用,因此调用的性能很重要,并且语言设计使得实现有足够的空间来作弊以实现可接受的性能.
但是,可以明确要求捕获:
sub foo(|c ($a,$b)) { say c.perl; } foo(1,2);
这会将参数捕获到c中,然后将它们解压缩到$a和$b中,强制执行该内部签名.
有人可能会发现像callame这样的东西确实找到了一种方法来访问传递它们的参数,即使签名中没有出现Capture.他们需要这样做会导致编译器选择任何包含各种优化的调用的例程,否则会丢弃发现参数所需的信息.这并不理想,未来很可能会发生变化 – 最有可能找到一种方法将|秘密捕获隐藏到签名或类似内容中.