从内部访问例程的 Capture

Accessing a routine's Capture from within

调用子例程 Capture 后访问它的语法是什么? self 仅适用于对象,&?ROUTINE refers to the static routine, not its state once called. So first, is it possible to access the routine's Capture from inside? If so, what's the syntax for accessing it? I've looked at the related Synopse 但我找不到方法(如果有的话)。

无法完全按照您的要求进行操作。虽然从概念上讲参数是通过形成一个包含它们的 Capture 对象来传递的,然后通过签名将其解包,但对于大多数调用来说,实际上并不存在 Capture 。由于 Perl 6 中的每个运算符都是 multi-dispatch 子例程调用,因此调用的性能很重要,并且语言设计使得实现有足够的空间进行欺骗以实现可接受的性能。

可以明确要求 Capture,但是:

sub foo(|c ($a, $b)) { say c.perl; }
foo(1, 2);

这会将参数捕获到 c 中,然后将它们也解压缩到 $a$b 中,强制执行内部签名。

人们可能会意识到 callsame 之类的东西确实找到了一种方法来访问参数以传递它们,即使签名中没有出现 Capture。他们这样做的需要导致编译器从各种优化中选择任何包含 callsame 的例程,否则会丢弃发现参数所需的信息。这并不理想,它很可能在未来会发生变化 - 最有可能通过找到一种方法将 |SECRET-CAPTURE 偷偷放入签名或类似的东西中。