2
一些理智添加到我的生活,尋找instantiate()
功能語法糖達特mirror
庫:instantiate(class|type|instance, argArray)
需要飛鏢鏡實例化()函數
class Klass {
int i1;
Klass(int i1) {
this.i1 = (i1 is int) ? i1 : 0;
}
}
type ktype = Klass;
Klass kinstance = new Klass(5);
Klass test1 = instantiate(Klass, [5]);
Klass test2 = instantiate(ktype, [5]);
Klass test3 = instantiate(kinstance, [5]);
目前與mirrors
90%,我的相互作用會被覆蓋這一個功能。目前一味地削減和抄襲純粹的愚蠢。肯定比我聰明的人已經做到了!
這裏是instantiate(type, [constructor, positional, named])
所有occassions:構造,位置的
- 參數和命名都是可選的
- 類型可以是
Type
,在實例化類型或類型 的字符串表示
- 構造函數:例如,新的Map.from(...) - 'from'是構造函數,'from'或#from
- 位置:位置參數清單
- 命名:在地圖的名稱參數,鑰匙可能是 '關鍵' 或#鍵
dynamic instantiate(dynamic v_type, [dynamic v_constructorName, List v_positional, Map v_named]) { Type type = (_type is Type) ? v_type : (v_type is String) ? str2Type(v_type) : reflect(v_type).type.reflectedType; Map v_named2 = (v_named is Map) ? v_named : (v_positional is Map) ? v_positional : (v_constructorName is Map) ? v_constructorName : {}; Map named = {}; v_named2.keys.forEach((k) => named[(k is Symbol)?k:new Symbol(k)] = v_named2[k]); List positional = (v_positional is List) ? v_positional : (v_constructorName is List) ? v_constructorName : []; Symbol constructorName = (v_constructorName is Symbol) ? v_constructorName : (v_constructorName is String) ? Symbol(v_constructorName) : const Symbol(''); return reflectClass(type).newInstance(constructorName, positional, named).reflectee; }
有你'宣佈全球ctor'某種原因而不是在'instantiate()'函數內? –
@ccyoung「是否有某種原因讓你在全局聲明ctor而不是在instantiate()函數中?」。請看看最新的答案。 – mezoni
謝謝! - 你的新例子清楚地說明了發生了什麼。 –