为什么两个结果打印出来是一样的?
final list1 = [ "a", "b", "c" ];
final result1 = true ? list1 : list1..removeWhere((e) => e == "a");
print(result1); // prints ["b", "c"]
final list2 = [ "a", "b", "c" ];
final result2 = false ? list2 : list2..removeWhere((e) => e == "a");
print(result2); // prints ["b", "c"]
这种情况仅发生在三元条件下。当在正常的 if-else 中时,这工作得很好。
三元运算符在级联运算符之前计算,因此基本上代码相当于
final result1 = (true ? list1 : list1)..removeWhere((e) => e == "a");
而不是你所期望的
final result1 = true ? list1 : (list1..removeWhere((e) => e == "a"));
参见:运算符优先级