为什么两个结果打印出来是一样的?
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 中时,这工作得很好。
三元运算符在级联运算符之前计算,因此基本上代码相当于
而不是你所期望的
请参阅:运算符优先级
因为这段代码
还给你一个
list1
. 然后list1
你就打电话 给list1..removeWhere((e) => e == "a")
. 同样的故事在这里:要检查这一点,您可以用圆括号括住第二部分: