给定List
,是否可以测试列表是否可增长?
尝试设置length
并捕获UnsupportedError
似乎是一种解决方案(虽然不清楚如果只将长度设置为相同的值会发生什么)。有更好的解决方案吗?
答案 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