内省 – 从内部访问例程的Capture

前端之家收集整理的这篇文章主要介绍了内省 – 从内部访问例程的Capture前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一旦被调用,访问子程序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.他们需要这样做会导致编译器选择任何包含各种优化的调用的例程,否则会丢弃发现参数所需的信息.这并不理想,未来很可能会发生变化 – 最有可能找到一种方法将|秘密捕获隐藏到签名或类似内容中.

猜你在找的Perl相关文章