Как в Dart получить аргументы командной строки вне основного метода?

В языке 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 
}

P.S.

Официальный ответ 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]);
}

язык С#

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

P.S.

Опять же, я убежден, что эта платформа Dart не такая, как все остальные.

Это только мое мнение. Это ничего не меняет.

Спасибо, Гюнтер Цохбауэр, за заботу, но не нужно это редактировать.


person mezoni    schedule 22.04.2014    source источник
comment
передать аргументы в foo или сохранить указатель args и arglen в некоторую глобальную переменную.   -  person Mohit Jain    schedule 22.04.2014
comment
Вы можете найти эту страницу интересной. В нем говорится о новых параметрах Options().arguments.   -  person Mohit Jain    schedule 22.04.2014
comment
@Mohit Jain также говорит, что параметры больше не доступны.   -  person Fox32    schedule 22.04.2014
comment
Связанная проблема в системе отслеживания ошибок: code.google.com/p/dart. /issues/detail?id=18369   -  person mezoni    schedule 22.04.2014


Ответы (1)


Если вы хотите использовать аргументы командной строки вне main, вы должны передать их. Если вы хотите, вы можете использовать глобальный для этого.

Это поведение похоже на Java, C и C++ (о котором вы забыли упомянуть).

Одним из больших преимуществ этого подхода является то, что теперь можно легко запускать другие программы, просто импортируя их (в виде библиотеки) и вызывая их main. Это также делает обработку аргументов более последовательной по отношению к изолятам.

person Florian Loitsch    schedule 23.04.2014