【问题标题】:Multiple MAIN signatures多个 MAIN 签名
【发布时间】:2019-11-22 21:18:13
【问题描述】:

我有一个包含多个 main 的包,我想定义几个选项:

我的代码是这样的:

package Perl6::Documentable::CLI {
    proto MAIN(|) is export {*}
    my %*SUB-MAIN-OPTS = :named-everywhere;

    multi MAIN(
        "setup"
    ) { ... }

    multi MAIN (
        "start"                           ,
        Str  :$topdir              = "doc",
        Bool :v(:verbose($v))      = False
    ) { ... }

但是当我尝试实际执行它时:

perl6 -Ilib bin/documentable start -v --topdir=ss

它输出这一行:

Usage:
  bin/documentable [--topdir=<Str>] [-v|--verbose] start

我正在使用 %*SUB-MAIN-OPTS,但它看起来也不起作用。

【问题讨论】:

    标签: signature raku


    【解决方案1】:

    最简单的解决方案是导出动态变量%*SUB-MAIN-OPTS,但这还没有完全实现:导出工作正常,但最终是一个空哈希。所以不是很有用。

    当 Rakudo 决定有一个 MAIN 子程序要运行时,它会调用一个名为 RUN-MAIN 的子程序。你可以实际上从你的模块中导出一个RUN-MAIN,并设置动态变量,然后调用原来的RUN-MAIN

    sub RUN-MAIN(|c) is export {
        my %*SUB-MAIN-OPTS = :named-anywhere;
        CORE::<&RUN-MAIN>(|c)
    }
    

    有关RUN-MAIN的更多信息,请参阅:https://docs.raku.org/language/create-cli#index-entry-RUN-MAIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多