flutter - 理解 = 飞镖中的运算符
问题描述
在这里做什么=
?
List<Segment> totalSegments = flight.departureFlight.segments;
两者都做,totalSegments
并flight.departureFlight.segments
指向相同的内存引用或totalSegments
具有相同的数据flight.departureFlight.segments
但指向不同的内存位置?
我的理解是后者应该发生,因为 dart 是按值传递而不是引用。但是,当我在该行下方添加这一行时,出现了一个非常烦人的错误:
totalSegments.addAll(flight.returnFlight.segments);
上面这行实际上修改了flight
变量,而变量又以某种方式修改AsyncSnapshot
了StreamBuilder
. 虽然,我没有在其他任何地方使用该变量,也没有修改提到的其他变量。
这一切都发生在build
无状态小部件的函数内部。也许这与它有关。
我尝试为它阅读dart 文档,但要么我找不到我要找的东西,要么那里的信息根本就不见了。也读这个,但根据这个,我的用例不应该发生。
解决方案
你被 Dart 通过值而不是引用传递的事实弄错了。实际上,恰恰相反:(几乎)所有内容总是通过引用传递(这通常是一件好事!)因此,这是很合乎逻辑的,因为你编辑了totalSegments
你departureflight.segments
也被编辑了。这是一个同义词。解决您的问题的方法之一是:
List<Segment> totalSegments = List();
totalSegments.addAll(flight.departureFlight.segments.toList());
推荐阅读
- android - 从未显示在 ImageView 中的图库或相机照片中选择
- python - 多列上的 Pandas get_dummies
- gams-math - 随机生成100个数据,或者选择是否可以
- java - Recursive minimal tree creating function buggy?
- haskell - 光线追踪并在交点处找到表面的法线向量
- javascript - Javascript - 将嵌套对象转换为项目数组
- html - 和标签的额外缩进?
- reactjs - 刷新页面 React-Laravel
- spring - 使用 JWT 的 Spring 安全性总是返回 401 未授权
- angular6 - Angular 6 - 如何通过单击图标转到另一个视图?