鑑於List
,是否有可能測試列表是否可增長?是否有可能測試飛鏢列表是否可增長?
嘗試設置length
和追趕的UnsupportedError
似乎是一個解決方案(雖然目前尚不清楚,如果你剛纔設置的長度爲相同的值會發生什麼)。有更好的解決方案
鑑於List
,是否有可能測試列表是否可增長?是否有可能測試飛鏢列表是否可增長?
嘗試設置length
和追趕的UnsupportedError
似乎是一個解決方案(雖然目前尚不清楚,如果你剛纔設置的長度爲相同的值會發生什麼)。有更好的解決方案
沒有辦法檢測一個列表是可擴展的(短期使用反射來找到實現類型,這是脆弱的,不會在dart2js中以相同的方式工作,並增加代碼大小)。
我們遇到的唯一有效的用例是當庫返回一個列表時有檢查/斷言。在所有其他情況下,函數/庫試圖修改一個參數,而不知道是否允許這樣做。
如果一個函數/庫可以破壞性地工作,它應該需要一個布爾(或類似的),以便調用者可以決定它們的參數是否可以改變。被調用者不應該默默地修改它的輸入,除非它很明顯(例如fillFoo(list)
)或參數告訴它(例如computeSquares(list, inPlace: true)
)。
http://dartbug.com/13926仍然開放,但我預計它明天關閉狀態爲「NotPlanned」。
弗洛裏安,感謝您的背景和解釋。你的建議作爲一個慣例是有意義的。 –
它可以使用反射(不是直接的)。
我想這不比捕捉異常更好。
print(MirrorSystem.getName(reflect(new List.from([0,1,2], growable: true))
.type.simpleName) == ('_GrowableList'));
編輯
這是不鼓勵使用符號的名稱 - 見Converting a Symbol into a String
我很驚訝地發現,在List中沒有任何bug(打開或關閉)請求一個bool屬性來檢查它。 –
我剛剛添加了它:) https://code.google.com/p/dart/issues/detail?id=17469 –