从内部访问例程的 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
偷偷放入签名或类似的东西中。
调用子例程 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
偷偷放入签名或类似的东西中。