2014-03-13 40 views
1

鉴于List,是否有可能测试列表是否可增长?是否有可能测试飞镖列表是否可增长?

尝试设置length和追赶的UnsupportedError似乎是一个解决方案(虽然目前尚不清楚,如果你刚才设置的长度为相同的值会发生什么)。有更好的解决方案

+0

我很惊讶地发现,在List中没有任何bug(打开或关闭)请求一个bool属性来检查它。 –

+2

我刚刚添加了它:) https://code.google.com/p/dart/issues/detail?id=17469 –

回答

2

没有办法检测一个列表是可扩展的(短期使用反射来找到实现类型,这是脆弱的,不会在dart2js中以相同的方式工作,并增加代码大小)。

我们遇到的唯一有效的用例是当库返回一个列表时有检查/断言。在所有其他情况下,函数/库试图修改一个参数,而不知道是否允许这样做。

如果一个函数/库可以破坏性地工作,它应该需要一个布尔(或类似的),以便调用者可以决定它们的参数是否可以改变。被调用者不应该默默地修改它的输入,除非它很明显(例如fillFoo(list))或参数告诉它(例如computeSquares(list, inPlace: true))。

http://dartbug.com/13926仍然开放,但我预计它明天关闭状态为“NotPlanned”。

+0

弗洛里安,感谢您的背景和解释。你的建议作为一个惯例是有意义的。 –

0

它可以使用反射(不是直接的)。
我想这不比捕捉异常更好。

print(MirrorSystem.getName(reflect(new List.from([0,1,2], growable: true)) 
    .type.simpleName) == ('_GrowableList')); 

编辑
这是不鼓励使用符号的名称 - 见Converting a Symbol into a String

相关问题