在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]);
}
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
import sys
print(sys.argv)
foreach($argv as $value)
{
echo "$value\n";
}
process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});
P.S。
再次,我确信Dart平台与其他人不一样。
这只是我的意见。它没有改变任何东西。
非常感谢GünterZöchbauer,但不需要对此进行编辑。
答案 0 :(得分:5)
如果你想在main之外使用命令行参数,你必须传递它。如果你愿意,你可以使用全局。
此行为类似于Java,C和C ++(您忘了提及)。
这种方法的一大优势是,现在只需导入其他程序(作为库)并调用其main
即可轻松启动其他程序。它还使参数处理在隔离区方面更加一致。