【问题标题】:Command line arguments parsing in ballerina similar to argparse in pythonBallerina 中的命令行参数解析类似于 python 中的 argparse
【发布时间】:2021-11-17 20:51:06
【问题描述】:

有什么方法可以解析 Ballerina 中的命令行参数吗?从我所见,您只能使用位置参数。我想做的是这样的:

//main.bal
public function main(string? name, int? age) returns error? {
    if (name is string && age is int) {
        io:println("Hello " + name);
        io:println("Age " + age.toString());
    }
}

然后运行程序如下:

bal run main.bal -- --name John --age=18

但这不起作用,因为它将“--name”作为第一个位置参数,“John”作为第二个位置参数。所以它会抛出一个错误:

error: invalid argument 'John' for parameter 'age', expected integer value

如果我按如下方式运行它,那么它就会运行:

bal run main.bal -- John 18

【问题讨论】:

    标签: parsing command-line-arguments ballerina


    【解决方案1】:

    如果为选项指定了参数,则可以按名称传递参数。

    如果参数是像这样的记录的一部分

    public type Details record {|
        string name?;
        int age?;
    |};
    

    main 函数有一个包含此类型的记录参数来指定选项

    public function main(*Details f) {
        string? name = f?.name;
        int? age = f?.age;
    
        if name is string && age is int {
            io:println("Hello ", name);
            io:println("Age ", age);
        }
    }
    

    可以如下运行

    $ bal run main.bal -- --name=Jo --age=25
    

    这是在 Swan Lake Alpha5 中引入的,发行说明提供了更多信息 - https://ballerina.io/downloads/swan-lake-release-notes/swan-lake-alpha5/#improved-command-line-argument-parsing

    【讨论】:

      【解决方案2】:

      您可以为此使用configurable 支持。 检查这个例子:

      import ballerina/io;
      
      configurable string name = ?;
      configurable int age = ?;
      
      public function main() returns error? {
          io:println("Hello " + name);
          io:println("Age " + age.toString());
      }
      

      然后在运行时您可以提供如下值:

      bal run main.bal -- -Cname="Ballerina" -Cage=5
      

      结果是

      Hello Ballerina
      Age 5
      

      Check this guide 了解更多详情。

      【讨论】:

      • 谢谢。在阅读文档后,我已经尝试过使用可配置的方法,但认为在参数名称之前不需要大写字母“C”。我以为这只是一个例子-Ckey。
      • 是的,C 用于Configurable(我猜)。您可以使用@MaryamZi 的回答跳过它
      猜你喜欢
      • 1970-01-01
      • 2013-09-13
      • 2020-01-25
      • 1970-01-01
      • 2012-04-24
      • 2012-03-19
      • 2018-12-31
      • 2013-02-01
      相关资源
      最近更新 更多