2017-03-16 3 views
2

Gibt es einen Weg in Dart, Argumente in einer Funktion (wie Python zum Beispiel) zu packen/entpacken?Packen/Entpacken Argumente in Dart

Für Verpackung Beispiel eine Funktion wie diese erklären zu können:

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

Und dann, dies zu tun:

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

Would Anzeige:

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

Was auspacken, in der Lage sein, so etwas zu tun:

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

Verwandte Ausgabe https://github.com/dart-lang/sdk/issues/29087

+0

Momentan nicht unterstützt. –

+0

"Aktuell" bedeutet, dass es geplant ist? Es wäre wirklich schön, diese Funktion zu haben, besonders wenn man Flutter benutzt, wo Methoden viele Parameter haben können. – aelayeb

+0

Ich denke nicht, dass es geplant ist, aber sie arbeiten an umfassenderen Änderungen und so etwas könnte später in Betracht gezogen werden. Sie können die Probleme https://github.com/dart-lang/sdk/issues überprüfen. Ich denke, die meisten Funktionen, die man sich vorstellen kann, wurden schon mindestens einmal vorgeschlagen ;-) –

Antwort

3

Dies wird derzeit nicht unterstützt, aber man kann sich sehr leicht verpacken, indem Sie eine Liste & Karte vorbei:

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