Shr*_*h.K 5 conditional-operator dart
为什么两个结果打印出来是一样的?
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"]
Run Code Online (Sandbox Code Playgroud)
这种情况仅发生在三元条件下。当在正常的 if-else 中时,这工作得很好。
三元运算符在级联运算符之前计算,因此基本上代码相当于
final result1 = (true ? list1 : list1)..removeWhere((e) => e == "a");
Run Code Online (Sandbox Code Playgroud)
而不是你所期望的
final result1 = true ? list1 : (list1..removeWhere((e) => e == "a"));
Run Code Online (Sandbox Code Playgroud)
请参阅:运算符优先级
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |