是否可以测试Dart List是否可以增长?

时间:2014-03-13 16:01:44

标签: dart

给定List,是否可以测试列表是否可增长?

尝试设置length并捕获UnsupportedError似乎是一种解决方案(虽然不清楚如果只将长度设置为相同的值会发生什么)。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

无法检测列表是否可增长(缺少使用反射来查找实现类型,这很脆弱,在dart2js中不会以相同的方式工作,并且会增加代码大小)。

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

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

http://dartbug.com/13926仍处于开放状态,但我预计明天会以状态“NotPlanned”关闭。

答案 1 :(得分:0)

可以使用反射(也不是直接的) 我想这并不比抓住异常更好。

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

修改
不鼓励使用符号名称 - 请参阅Converting a Symbol into a String