【问题标题】:How in Dart get command line arguments outside of the `main` method? [closed]Dart 如何在“main”方法之外获取命令行参数? [关闭]
【发布时间】:2014-06-06 22:39:03
【问题描述】:

在 C# 语言中存在用于此目的的全局系统变量。

Environment.CommandLine

当当前进程启动时,此属性提供对程序名称和命令行上指定的任何参数的访问。

Dart 是异步语言。它允许自启动进程。

void main() {
  task("foo", callback1);
  task("baz", callback2);
}

打包任务。

void task(String name, action()) {
  schedule();
  addTask(name. action);
}

void schedule() {
  // Here we start timer if it not started.
  // This timer will get cmd line arguments
  // And executes task specified in cmd line arguments 
}

附言

来自 Dart 团队的官方回答:“未计划”。

我无法理解:“为什么通过他们的库在其他平台上这是可能的,但在 Dart 平台上这是不可能的?”。

为什么只通过“主”参数,甚至不能确保其他隔离不会将这些参数替换为不是真正的操作系统进程命令行参数的代理参数)?

这里的例子:

Go 语言

func main() {
    fmt.Println(len(os.Args), os.Args)
}

Rust 语言

fn main() {
  let args = os::args();
  println!("The first argument is {}", args[1]);
}

C#语言

class Sample {
  public static void Main() {
    Console.WriteLine();
    String[] arguments = Environment.GetCommandLineArgs();
    Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments));
  }
}

Ruby 语言

ARGV.each do|a|
  puts "Argument: #{a}"
end

Python 语言

import sys

print(sys.argv)

PHP 语言

foreach($argv as $value)
{
  echo "$value\n";
}

Node.js 语言

process.argv.forEach(function (val, index, array) {
  console.log(index + ': ' + val);
});

附言

再次,我确信 Dart 平台与其他平台不同。

这只是我的意见。它不会改变任何东西。

感谢 Günter Zöchbauer 的关心,但无需编辑。

【问题讨论】:

  • 将参数传递给 foo 或将 args 指针和 arglen 保存到某个全局变量中。
  • 您可能会发现this 页面很有趣。它谈到了新的 Options().arguments。
  • @Mohit Jain 它还说选项不再可用。
  • 错误跟踪器中的相关问题:code.google.com/p/dart/issues/detail?id=18369

标签: dart dart-io


【解决方案1】:

如果你想在 main 之外使用命令行参数,你必须传递它。如果需要,您可以使用全局变量。

这种行为类似于 Java、C 和 C++(您忘了提及)。

这种方法的一大优势是,现在只需导入其他程序(作为库)并调用它们的main 即可轻松启动它们。它还使参数处理在隔离方面更加一致。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2023-03-11
    • 2019-07-27
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多