如何在Dart中获取`main`方法之外的命令行参数?

时间:2014-04-22 13:51:32

标签: dart dart-io

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

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 
}

P.S。

Dart团队的正式回答:“没有计划”。

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

为什么只通过“main”参数,甚至不能确保其他隔离区不能替代那些不是真正的OS进程命令行参数的代理参数的参数?)

这里的例子:

转到语言

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

防锈语言

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);
});

P.S。

再次,我确信Dart平台与其他人不一样。

这只是我的意见。它没有改变任何东西。

非常感谢GünterZöchbauer,但不需要对此进行编辑。

1 个答案:

答案 0 :(得分:5)

如果你想在main之外使用命令行参数,你必须传递它。如果你愿意,你可以使用全局。

此行为类似于Java,C和C ++(您忘了提及)。

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