2017-03-16 48 views
2

Dart有沒有在函數中打包/解壓參數的方法(例如Python)?Dart中的打包/解包參數

對於包裝例如,能夠宣佈這樣的功能:

packArguments(*listOfArguments, **mapOfArguments) { 
    listOfArguments.forEach((arg) => print(arg)); 
    mapOfArguments.forEach((key, val) => print("$key => $val")); 
} 

,然後做這個:

packArguments("I", "Put", "whatever", "I", "want, arg1: "A", arg2: 1); 

會顯示:

I 
Put 
whatever 
I 
want 
arg1 => A 
arg2 => 1 

至於拆包,能夠做這樣的事情:

functionWithLotOfArgument(a, b, c, d, e, {aa, bb = null, cc = null}) { 
    // do stuff 
} 
var argList = [1, 2, 3, 4, 5]; 
var argMap = {"aa": "haha", bb: "baby"}; 

functionWithLotOfArgument(*argList, **argMap); 

相關問題https://github.com/dart-lang/sdk/issues/29087

+0

目前不支持。 –

+0

「目前」意味着它的計劃?這個功能真的很棒,特別是在使用Flutter方法可以有很多參數的情況下。 – aelayeb

+0

我不認爲這是計劃中的,但他們正在研究更廣泛的變化,稍後可能會考慮這樣的變化。你可以檢查問題https://github.com/dart-lang/sdk/issues。我想大多數人能夠想到的功能至少已經提出過一次了;-) –

回答

3

這是目前不支持,但你可以很容易收拾自己,通過傳遞列表&圖:

void packArguments(List listOfArguments, Map mapOfArguments) { 
    listOfArguments.forEach((arg) => print(arg)); 
    mapOfArguments.forEach((key, val) => print("$key => $val")); 
} 

void main() { 
    packArguments(['a', 3], {'arg1': 'a', 'arg2': 5}); 
} 

https://dartpad.dartlang.org/98ed3a3b07a2cca049cde69ca50ca269