【发布时间】:2018-05-11 12:36:15
【问题描述】:
或者类似java的main()方法?换句话说,首先执行的方法,可以从终端读取一个或多个参数。
【问题讨论】:
标签: raku
或者类似java的main()方法?换句话说,首先执行的方法,可以从终端读取一个或多个参数。
【问题讨论】:
标签: raku
是的,它被称为MAIN,它可以自动解析终端参数。此外,它甚至可以是multi sub(支持不同的签名),具有默认值,根据需要进行标记并进行类型验证,例如:
#|(optional description for USAGE message)
sub MAIN( Int :$length = 24,
:file($data) where { .IO.f // die "file not found in $*CWD" } = 'file.dat',
Bool :v(:$verbose) #`( -verbose, --verbose, -v or --v ) )
{
say $length if $length.defined;
say $data if $data.defined;
say 'Verbosity ', ($verbose ?? 'on' !! 'off');
exit 1;
}
【讨论】:
MAIN子中。一个很好的用例示例是 Mi6,其中作为其一部分安装的 bin 脚本是各种类调用的包装器。 github.com/skaji/mi6/blob/master/bin/mi6
method MAIN,你可以将它标记为is export,这将在外部范围内创建一个sub,即你通常放置sub MAIN的地方。但是请注意,它的第一个参数想要填充您的类的一个实例,而普通的MAIN 实现可能不知道该怎么做。你可以通过在签名中声明调用者的类型来解决这个问题,例如method MAIN(Str $first-arg: Str $other-arg) {}