【问题标题】:How to export %*SUB-MAIN-OPTS如何导出 %*SUB-MAIN-OPTS
【发布时间】:2019-05-01 19:56:43
【问题描述】:

假设有一个包含sub MAIN 的模块应该可以提高启动速度。不幸的是,我无法以这种方式使用named-anywhere 功能。我的出口是否损坏或我应该怎么做?

use v6.c;

unit module My::Main;
our %*SUB-MAIN-OPTS is export = ( 'named-anywhere' => True);

multi sub MAIN() is export {
    say 1;
}

multi sub MAIN('a', :$pa) is export {
    say $pa;
}

【问题讨论】:

  • 这对我来说就像是 NYI 和 bug 的结合。动态变量导出,因为在导入代码中可见。但它已经失去了它的价值。所以我认为这需要一个 Rakudo 问题,以确保我们要么解决这个问题,要么确定这是未定义/不需要/非法的。

标签: raku


【解决方案1】:

您目前无法以这种方式导出动态变量,也许我们永远不会。

与此同时,由于这通常是在命令行脚本的上下文中,所以有一种解决方法:

# in your module:
PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;

# in your script
dd %*SUB-MAIN-OPTS'
# Hash element = ${:named-anywhere}

您所做的是在 %SUB-MAIN-OPTS 哈希中设置 named-anywhere 键,该哈希位于 PROCESS:: 命名空间中。这是外部命名空间,如果在堆栈中的其他任何地方都找不到动态变量,则在其中查找动态变量。请注意,对键 named-anywhere 的分配实际上会激活散列,如果它还不存在的话。因此,这不会干扰将来对 %SUB-MAIN-OPTS 哈希的任何其他添加。

【讨论】:

    【解决方案2】:

    虽然您可以通过这种方式导出MAIN,但您必须考虑%*SUB-MAIN-OPTS variable 的范围。我不清楚您是在导入模块还是在导出模块中设置值。在任何情况下,只需打印MAIN subs 中的值即可进行检查。我想说的是,作为一个动态变量,你必须在导入模块中设置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2014-07-18
      • 2020-03-04
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多