2013-03-25 49 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没有任何警告或错误。

你很可能在这里遇到了两个错误,第一个是没有错误,第二个是虚拟机挂起。