2014-04-22 58 views
-2

在C#語言中存在用於此目的的全局系統變量。Dart如何在`main`方法之外獲得命令行參數?

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平臺中這是不可能的?」。

爲什麼只有通過「主要」參數,甚至不能確保其他隔離不能替代這些參數不是真正的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); 
}); 

附:

我再次相信,Dart平臺並不像其他人一樣。

這只是我的看法。它不會改變任何東西。

感謝GünterZöchbauer,感謝您的關注,但不需要對此進行編輯。

+2

將參數傳遞給foo或將args指針和arglen存入某個全局變量。 –

+0

您可能會發現[this](http://stackoverflow.com/questions/9279541/how-do-i-access-argv-command-line-options-in-dart)頁面有趣。它討論了新的Options()參數。 –

+1

@Mohit Jain它也說選項不再可用。 – Fox32

回答

4

如果你想使用主外的命令行參數,你必須傳遞它。如果你願意,你可以使用全局的。

此行爲與Java,C和C++(您忘記提及)類似。

這種方法的一個巨大優勢是,現在很容易通過簡單地導入它們(作爲庫)並調用它們的main來啓動其他程序。這也使得論點處理在分離方面更加一致。

相關問題