【问题标题】:Does perl6 have a class method equivalent to the MAIN sub?perl6 是否有与 MAIN sub 等效的类方法?
【发布时间】:2018-05-11 12:36:15
【问题描述】:

或者类似java的main()方法?换句话说,首先执行的方法,可以从终端读取一个或多个参数。

【问题讨论】:

    标签: raku


    【解决方案1】:

    是的,它被称为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;
    }
    

    【讨论】:

    • 谢谢。但这在课堂上有效吗?如果我在一个类中定义了一个 sub 或一个名为 MAIN 的方法,它似乎不会执行。
    • 你可以在一个类中添加一个MAIN并直接执行这个类(例如在开发时),但是和Java一样,它在实际程序中没有多大用处。你想让我做什么?初始化资源? MAIN 从主脚本调用,而不是从类调用。
    • 如果你想让你的脚本在一个类中启动一个方法,你可以将它包含在你脚本的MAIN子中。一个很好的用例示例是 Mi6,其中作为其一部分安装的 bin 脚本是各种类调用的包装器。 github.com/skaji/mi6/blob/master/bin/mi6
    • 可以把它放在一个类中,它就会运行。如果您正在测试命令行参数,但由于某种原因不想编写测试,这很方便。但是您也可以将随机代码放在一个类中,它也会运行。这不仅限于处理参数的函数。 "say 'FOO'" 将在您加载代码时显示该输出。
    • 如果你想获取method MAIN,你可以将它标记为is export,这将在外部范围内创建一个sub,即你通常放置sub MAIN的地方。但是请注意,它的第一个参数想要填充您的类的一个实例,而普通的MAIN 实现可能不知道该怎么做。你可以通过在签名中声明调用者的类型来解决这个问题,例如method MAIN(Str $first-arg: Str $other-arg) {}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多