假定有一个包含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;
}
答案 0 :(得分:4)
您目前无法以这种方式导出动态变量,也许我们永远也不会。
同时,由于这通常是在命令行脚本的上下文中进行的,因此有一种解决方法:
# in your module:
PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;
# in your script
dd %*SUB-MAIN-OPTS'
# Hash element = ${:named-anywhere}
您正在做的是在named-anywhere
命名空间中的%SUB-MAIN-OPTS
哈希中设置PROCESS::
键。如果无法在堆栈的其他任何位置找到动态变量,则在外部命名空间中查找动态变量。请注意,如果密钥named-anywhere
的赋值尚不存在,则实际上将使其散列。因此,这不会干扰以后在%SUB-MAIN-OPTS
哈希中添加任何其他内容。
答案 1 :(得分:3)
通常,我不会将MAIN
子目录放置在外部文件中,而是有一个脚本引用了外部文件中的函数。
答案 2 :(得分:3)
虽然您可以以这种方式导出MAIN
,但必须考虑%*SUB-MAIN-OPTS
variable的范围。我不清楚是要在导入模块中还是在导出模块中设置值。无论如何,只要在MAIN
子项中打印该值即可进行检查。我想说,作为动态变量,您必须在导入模块中进行设置。