我使用 .fold() 方法對 List 求和時出錯:
List<int> listInt = [1, 2, 3, 4, 5, 6];
int sumList = listInt.fold(0, (p, c) => p c);
// First Print
print(sumList);
// Second Pring
print(listInt.fold(0, (p, c) => p c));
列印 sumList 非常好,但是當我列印相同的操作時,出現編譯錯誤:
The operator ' ' can't be unconditionally invoked because the receiver can be 'null'.
任何想法為什么?
uj5u.com熱心網友回復:
Dart 型別系統不夠聰明,無法猜測正確型別的情況。在你的第二行中發生的事情是fold認為你想要一個Object?回傳所以p變成Object?.
在第一個示例中,Dart 型別系統根據int您的情況的預期回傳型別猜測型別。但是因為printexpects Object?,你真的沒有得到你期望的型別。
原因是 Dart 型別系統并不真正理解基于第一個引數的型別定義作為第二個引數給出的方法的回傳型別的概念。fold如果我們沒有輸入輸出,那么這里經常會出現問題。
我們可以通過將您的第二行更改為:
print(listInt.fold<int>(0, (p, c) => p c));
它應該按您的意愿作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387089.html
標籤:镖
