2014-03-13 41 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

相關問題