带有级联飞镖的三元运算符的奇怪行为

问题描述 投票:0回答:1

为什么两个结果打印出来是一样的?

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 中时,这工作得很好。

flutter dart conditional-operator
1个回答
2
投票

三元运算符在级联运算符之前计算,因此基本上代码相当于

final result1 = (true ? list1 : list1)..removeWhere((e) => e == "a");

而不是你所期望的

final result1 = true ? list1 : (list1..removeWhere((e) => e == "a"));

参见:运算符优先级

© www.soinside.com 2019 - 2024. All rights reserved.