我正在將一些 JS 代碼轉換為 Dart。JS 代碼為陣列添加了一些屬性。
將“開始”屬性添加到陣列的示例。
var a = [1,2,3,4];
a.start = 3;
由于有很多這樣的代碼,我試圖盡可能地與原始 JS 代碼保持一致,我試圖在 Dart 中找到類似的解決方案。
我看過型別的擴展,例如以下,但不確定它們是否適用于變數并且只適用于方法?
extension JSList<T> on List<T> {
int _start;
int get start => _start;
void set start(x) => _start = x;
}
但我似乎收到各種錯誤,例如
Error: Extensions can't declare instance fields
查看檔案,我不確定我正在嘗試的內容是否被允許。
那么有沒有辦法將一些自定義欄位/變數/屬性添加到現有的 List 資料型別?或者還有其他類似的建議嗎?
uj5u.com熱心網友回復:
Dart 擴展方法是獨立函式的語法糖,看起來像實體方法呼叫。因此,您不能直接使用它們向物件添加獨立資料成員。
在某些情況下,您可以讓擴展方法使用 anExpando將相應的this物件與所需的資料相關聯:
extension JSList<T> on List<T> {
static final _startValues = Expando<int>();
int get start => _startValues[this] ?? 0;
set start(int x) => _startValues[this] = x;
}
請注意,Expando對于可以用作鍵的型別有一些限制。有關Expando更多詳細資訊,請參閱檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395287.html
標籤:镖
下一篇:從具有相同屬性的多個串列創建串列
