2013-03-25 78 views
0

行爲似乎涉及到「延伸」,如圖下面的單元測試存在:單元測試吊延伸

typedef dynamic GetFromThing<T extends Thing>(T target); 

typedef GetFromThing<T> DefGetFromThing<T extends Thing>(dynamic def); 

typedef dynamic GetFromT<T>(T target); 

typedef GetFromT<T> DefGetFromT<T>(dynamic def); 

class Thing { 
    int value; 
} 

class Test { 

    static final GetFromThing<Thing> fromThingSimple = (Thing target) { 
    return target.value; 
    }; 

    static final DefGetFromThing<Thing> fromThing = (dynamic def) { 
    return (target) => null; 
    }; 

    static final DefGetFromT<int> fromInt = (dynamic def) { 
    return (target) => null; 
    }; 

} 

main() { 
    test('this works',() { 
    var temp1 = Test.fromThingSimple(new Thing()); 
    }); 

    test('this works too',() { 
    var temp = Test.fromInt(10); 
    }); 

    test('should let me call lexically closed functions',() { 
    var temp = Test.fromThing(10); // <-- causes test to hang 
    }); 
} 
+0

嘗試提交一個錯誤? https://code.google.com/p/dart/issues/entry – 2013-03-26 05:24:56

回答

2

虛擬機掛起的事實顯然是一個錯誤。該代碼是合法的。 typedef描述函數類型並且可以是通用的,而函數類型本身不是通用的這一事實原則上不是問題(儘管它可能用於實現)。

+0

感謝您的回覆!我提交了一個錯誤https://code.google.com/p/dart/issues/detail?id=9443。 – Perry 2013-03-26 19:10:45

1

我覺得很有趣的是,類型參數因爲Dart沒有泛型方法,所以typedef沒有任何警告或錯誤。

你很可能在這裏遇到了兩個錯誤,第一個是沒有錯誤,第二個是虛擬機掛起。