2017-03-16 30 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