cjm*_*cjm 6 command-line command-line-arguments raku
这个 Raku 程序按我的预期工作:
sub MAIN($name) { say "Got $name" }
Run Code Online (Sandbox Code Playgroud)
我可以在命令行上传递一个名称:
$ raku m1.raku foo
Got foo
Run Code Online (Sandbox Code Playgroud)
然而,明显的扩展,
sub MAIN(@names) { say "Got $_" for @names }
Run Code Online (Sandbox Code Playgroud)
不起作用:
$ raku mm.raku foo
Usage:
mm.raku <names>
$ raku mm.raku foo bar
Usage:
mm.raku <names>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Eli*_*sen 11
@cjm 说什么。
但是,您可以更进一步,检查您指定的名称是否实际上是文件。如果不是,则生成错误消息。诀窍是使用多分派:
subset File of Str where *.IO.f;
multi sub MAIN(*@files where @files.all ~~ File) {
say "These are all files: @files.join(",")";
}
multi sub MAIN(*@files) {
say "These are *NOT* files: @files.grep(* !~~ File).join(",")";
}
Run Code Online (Sandbox Code Playgroud)
如果命令行上指定的所有名称实际上都是文件,则将运行第一个候选对象。如果第一个没有触发,则第二个候选将运行,这意味着并非所有指定的名称实际上都是文件。
cjm*_*cjm 10
您必须为此使用slurpy 数组签名:
sub MAIN(*@names) { say "Got $_" for @names }
Run Code Online (Sandbox Code Playgroud)
根据需要工作:
$ raku mm.raku
$ raku mm.raku foo
Got foo
$ raku mm.raku foo bar
Got foo
Got bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |