首先:raku (perl6) 很棒。克罗也是。只用了一个周末就坠入爱河。但是现在我偶然发现了一些必须非常简单的东西。
如果我在多分派 MAIN 中使用 slurpy 参数,则可以识别并完美运行:
multi MAIN( 'config', 'add', *@hostnames ) {
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其设为非 slurpy 数组,则要么无法识别,要么我不知道如何从命令行提供它:
multi MAIN( 'config', 'add', @hostnames ) {
Run Code Online (Sandbox Code Playgroud)
我希望这些调用之一能够工作:
$ cli.raku config add www.example.com example.com
$ cli.raku config add www.example.com,example.com
$ cli.raku config add www.example.com, example.com
Run Code Online (Sandbox Code Playgroud)
Cro CLI 中使用了类似的构造,但是没有示例说明如何使用文档中的数组调用其中一个命令。
我也用一个数组作为命名参数尝试了这个:
my %*SUB-MAIN-OPTS = :named-anywhere;
multi MAIN( 'config', 'add', :@hostnames) {
Run Code Online (Sandbox Code Playgroud)
鉴于raku 文档中的示例,我希望它可以工作:
$ cli.raku config add --hostnames=www.example.com example.com
Run Code Online (Sandbox Code Playgroud)
但它没有,也没有逗号或空格逗号分隔的变体。在所有情况下,我都会获得使用信息。
multiple-dispatch command-line-interface named-parameters raku
假设有一个模块包含sub MAIN应该提高启动速度的's'.不幸的是我无法以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;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含多个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
) { ... }
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下命令实际执行它时:
perl6 -Ilib bin/documentable start -v --topdir=ss
Run Code Online (Sandbox Code Playgroud)
它输出以下行:
Usage:
bin/documentable [--topdir=<Str>] [-v|--verbose] start
Run Code Online (Sandbox Code Playgroud)
我正在使用%* SUB-MAIN-OPTS,但看来这也不起作用。