退出Genie中init块的错误代码

时间:2016-03-20 14:01:22

标签: genie

在Vala中,我可以编写以下代码:

int main(string[] args) {
    if (args[1] == "secret") {
        return 0;
    } else {
        return 1;
    }
}

我如何在精灵中做同样的事情?以下不起作用:

init
    if args[1] == "secret"
        return 0
    else
        return 1

...因为不允许从void块返回值。

1 个答案:

答案 0 :(得分:2)

目前使用init方法无法做到这一点。请参阅Bug 707233 - Allow exit status to be set from init function

这可以通过GLib的Process.exit()电话来实现:

[indent=4]
init
    if args[ 1 ] == "secret"
        Process.exit( 0 )
    else
        Process.exit( 1 )

或者,如果您在Posix环境中工作,请使用valac --pkg posix my_exit_example.gs编译以下内容:

[indent=4]
init
    if args[ 1 ] == "secret"
        Process.exit( Posix.EXIT_SUCCESS )
    else
        Process.exit( Posix.EXIT_FAILURE )

如果您想将此添加到Genie解析器,请查看vala/valagenieparser.vala源文件中的parse_main_method_declaration()方法。语法必须类似于:

[indent=4]
init:int
    if args[ 1 ] == "secret"
        return 0
    else
        return 1