代码之家  ›  专栏  ›  技术社区  ›  jjmerelo

从内部访问例程的捕获

  •  6
  • jjmerelo  · 技术社区  · 7 年前

    调用子例程捕获后,访问它的语法是什么? self 仅适用于对象,以及 &?ROUTINE 指的是静态例程,而不是调用后的状态。那么首先,是否可以访问例程的 Capture 从内部?如果是,访问它的语法是什么?我已经看过了 related Synopse 但我找不到办法,如果有办法的话。

    1 回复  |  直到 7 年前
        1
  •  10
  •   Jonathan Worthington    7 年前

    没有办法完全按照你的要求去做。而概念上的参数是通过形成 Capture 对象保存它们,然后通过签名解包,对于大多数调用否 俘虏 曾经真的存在过。由于Perl 6中的每个操作符都是一个多分派子例程调用,因此调用的性能很重要,而且语言设计使得实现有足够的空间进行欺骗,以获得可接受的性能。

    可以明确要求 俘虏 但是:

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

    这将把参数捕获到 c 然后把它们也拆成 $a $b ,强制执行该内部签名。

    人们可能会意识到 callsame 确实要找到一种访问参数的方法来传递它们,即使签名中没有显示捕获。这样做的需要会导致编译器选择任何包含 callsame公司 在各种优化中,这将丢弃发现参数所需的信息。这并不理想,而且很可能在未来会发生变化——很可能是通过找到一种方法 |SECRET-CAPTURE 签名或类似内容。