-3

在 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 Team 的官方回答:“未计划”。

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

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

这里的例子:

围棋语言

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

红宝石语言

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 的关心,但无需编辑。

4

1 回答 1

6

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

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

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

于 2014-04-23T20:39:29.110 回答