Multiple MAIN signatures

丶灬走出姿态 提交于 2019-12-10 12:57:37

问题


I have a package with multiple main and I want to define several options:

My code is something like this:

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
    ) { ... }

But when I try to actually execute it with:

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

It outputs this line:

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

I am using %*SUB-MAIN-OPTS but it looks like it does not work neither.


回答1:


The simplest solution would be to export the dynamic variable %*SUB-MAIN-OPTS, but that is still Not Yet Implemented completely: the export works sorta, but winds up being an empty hash. So not very useful.

Rakudo will call a subroutine called RUN-MAIN when it decides there is a MAIN sub to be run. You can actually export a RUN-MAIN from your module, and set up the dynamic variable, and then call the original RUN-MAIN:

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

For more information about RUN-MAIN, see: https://docs.raku.org/language/create-cli#index-entry-RUN-MAIN



来源:https://stackoverflow.com/questions/57018252/multiple-main-signatures

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!