從python
即將的功能,我知道我可以很容易地實現這一目標:鏢怎麼做,可以接受任何數量的ARGS
def someFunc(*args):
for i in args:
print i
這樣我可以給100個ARGS輕鬆。
如何在Dart上做類似的事情?
Thx。
從python
即將的功能,我知道我可以很容易地實現這一目標:鏢怎麼做,可以接受任何數量的ARGS
def someFunc(*args):
for i in args:
print i
這樣我可以給100個ARGS輕鬆。
如何在Dart上做類似的事情?
Thx。
在DART中,沒有真正的可變參數的支持。有,但它一直是removed。正如Fox32所說,你可以用noSuchMethod
來做到這一點。但是,如果沒有真正需要調用方法method(param1, param2, param3)
,則可以跳過此步驟並將Map
或List
定義爲參數。鏢支持這兩種類型的文字,所以,語法也短而明確:
void method1(List params) {
params.forEach((value) => print(value));
}
void method2(Map params) {
params.forEach((key, value) => print("$key -- $value"));
}
void main() {
method1(["hello", "world", 123]);
method2({"name":"John","someNumber":4711});
}
您可以在類上使用noSuchMethod
方法(可能與call()
方法結合使用,但我沒有嘗試過)。但是,當你使用這個時(至少對我來說),似乎你放棄了飛鏢編輯器的一些檢查功能。
該方法有一個Invocation
實例作爲參數,其中包含方法名稱和所有未命名的參數作爲列表,並將所有命名參數作爲哈希映射。
有關noSuchMethod
和call()
的更多詳細信息,請參閱here。但鏈接包含不適用於里程碑4的過時信息,請參閱here以瞭解更改。
事情是這樣的:
typedef dynamic FunctionWithArguments(List<dynamic> positionalArguments, Map<Symbol, dynamic> namedArguments);
class MyFunction
{
final FunctionWithArguments function;
MyFunction(this.function);
dynamic noSuchMethod(Invocation invocation) {
if(invocation.isMethod && invocation.memberName == const Symbol('call')) {
return function(invocation.positionalArguments, invocation.namedArguments);
}
return;
}
}
用法:
class AClass {
final aMethod = new MyFunction((p, n) {
for(var a in p) {
print(a);
}
});
}
var b = new AClass();
b.aMethod(12, 324, 324);
([與在鏢參數或參數可變數目創建函數]的可能重複http://stackoverflow.com/questions/13731631 /創建功能與 - 可變數的論點 - 或 - 參數 - 在-DART) – Fox32 2013-04-28 13:57:01