飞镖参考地图不改变地图

2024-01-01

我想知道为什么map1无法打印{a: 2, b: 3}就像map2一样。

void main() {
  Map<String, int> myMap1 = {"a": 1, "b": 2};
  Map<String, int> myMap2 = {"a": 1, "b": 2};

  print("before: $myMap1 , $myMap2"); // before: {a: 1, b: 2} , {a: 1, b: 2}


  upgradeAndSetEqual(myMap1);
  myMap2 = upgradeAndReturn(myMap2);

  print(" after: $myMap1 , $myMap2"); //  after: {a: 1, b: 2} , {a: 2, b: 3}


}

void upgradeAndSetEqual(Map<String, int> toUpgrade) {
  toUpgrade = toUpgrade.map((key, val) {
    val += 1;

    return new MapEntry(key, val);
  });
}

Map<String, int> upgradeAndReturn(Map<String, int> toUpgrade) {
  return toUpgrade.map((key, val) {
    val += 1;

    return new MapEntry(key, val);
  });
}

我试图找出 Dart 是按引用传递还是按值传递,并发现了这一点。https://groups.google.com/a/dartlang.org/forum/#!topic/misc/iP5TiJMW1F8/discussion https://groups.google.com/a/dartlang.org/forum/#!topic/misc/iP5TiJMW1F8/discussion

但是,我不明白为什么它似乎不适用于前面的示例。

这是 DartPad 中的代码https://dartpad.dartlang.org/452f15102a2c52d10ce28ff9ebe445b2 https://dartpad.dartlang.org/452f15102a2c52d10ce28ff9ebe445b2


.map(...)创建一个新地图,它不会修改它所调用的地图

void upgradeAndSetEqual(Map<String, int> toUpgrade) {
  toUpgrade = toUpgrade.map((key, val) {
    val += 1;

    return new MapEntry(key, val);
  });
}

toUpgrade = ...没有效果,因为它是一个参数,更改它引用的内容不会更改其他引用。

如果将映射(或任何对象)作为参数传递,则引用(指针)将按值传递。该副本仍然引用调用者传递的相同值实例。 这意味着更新什么toUpgrade指向,不会更改调用者站点上的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

飞镖参考地图不改变地图 的相关文章

随机推荐

  • 警告:session_start() [function.session-start]:无法发送会话缓存限制器[重复]

    这个问题在这里已经有答案了 我在这里遇到 Session start 问题 Warning session start function session start 无法发送会话缓存限制器 标头已发送 输出从 C xampp htdocs
  • 为什么 unique_ptr 析构函数的异常会终止程序?

    看一下这段代码 它导致程序终止而不捕获异常 include
  • 在 python pandas 中,使用数据框中选定的列为每行数据创建哈希值

    我问过了类似的问题 https stackoverflow com questions 5086794 create hash value for each row of data in dataframe in r在 R 中关于为每行数据
  • 使用 putImageData 从画布上的像素数组绘制图像

    我正在开发一个可以加密图像并在画布上重新绘制解密图像的项目 由于我对编码和编程还很陌生 目前在重绘解密的图像数据时遇到问题 该数据是 R G B A 形式的像素数组 我认为只需将数据放入 ctx putImageData imgd 0 0
  • 低高度图表上高点的工具提示未显示

    我有一个问题 工具提示无法根据图表 浏览器窗口的大小显示 在我看来 这最初看起来像是分面图的问题 但这种行为在常规 单个图表上也很明显 我已经做了很多搜索 但到目前为止还没有找到任何东西 情节论坛上有一个类似的帖子 但目前还没有答案 这是单
  • 如果在 spring jpa 中连接关闭,如何重新连接数据库?

    我在我的 Web 应用程序中使用 spring boot spring jpa mysql 当我的应用程序运行几个小时时 我总是遇到以下异常 2016 07 30 21 27 12 434 ERROR 13553 http nio 8090
  • fmdb 执行更新失败

    我究竟做错了什么 这是一个非常简单的语句 但无法弄清楚是什么导致它失败 FMDatabase db FMDatabase databaseWithPath appDelegate databasePath db open isSuccess
  • Android 返回时刷新 Activity

    我需要一点帮助来刷新我的应用程序中的一项活动 我正在使用选项卡主机活动并连接到 Web 服务并从我的子活动之一下载一些数据 当我在子活动中按下同步按钮时 我将启动一个不在选项卡主机中的新活动 同步完成后 它会返回到其父活动 子活动 我想要实
  • remove() 之后 ConcurrentLinkedQueue$Node 仍保留在堆中

    我有一个多线程应用程序写入和读取 ConcurrentLinkedQueue 它在概念上用于支持列表 表中的条目 我最初为此使用了 ConcurrentHashMap 效果很好 一项新要求要求跟踪传入的订单条目 因此可以根据某些条件 从最旧
  • 如何加快 pandas.DataFrame .to_sql 的插入速度

    您好 我目前正在尝试将四个 pandas 数据帧中的数据写入本地计算机上的 mysql 我的计算机需要 32 秒插入 20 000 条记录 每个表 5000 条 代码 表格 1 帖子 2 post stats 3 后语言 4 帖子标签 en
  • 为什么 PowerShell 将 DateTime 格式字符串中的斜杠视为点?

    PS C gt Get Date ToString MM dd yyyy 11 12 2016 PS C gt DateTime ParseExact 10 14 2016 MM dd yyyy null Exception calling
  • 类型不符合 Alamofire 的“URLRequestConvertible”协议

    这是代码 enum Router URLRequestConvertible Error Type Five100px Router does not conform to protocol URLRequestConvertible st
  • LINQ Lambda,按列表分组

    我在寻找正确的语法来完成以下任务时遇到了一些麻烦 是否可以使用 LINQ Lambda 表达式 到 GroupBy 数据 而不是使用通常的 Sum 或 Count 我希望结果数据是 Int 列表 我定义了自己的类 名为 Filter IDs
  • SQL Developer 操作系统身份验证

    我有 Oracle SQL Developer 版本 4 1 19 64 位 其中包含 JDK8 这适用于需要 用户名 密码 组合的 Oracle 连接 没有问题 我的问题是我无法连接操作系统身份验证配置 请注意 我can使用操作系统身份验
  • 播放/录制 .DSS 或 .DS2 文件

    我正在运行一个项目 该项目应该允许播放并最终录制 DSS 数字语音标准 和 DS2 数字语音标准专业版 音频文件 但是 我似乎找不到任何相关内容 有没有什么方法可以实现这个目标 或者有什么库可以让它启动并运行 我正在使用 android 内
  • 将逗号分隔符添加到值变量

    我已经阅读了数千个逗号分隔符 JavaScript 问题 答案 但发现很难在实践中应用它 例如我有变量 x 10023871234981029898198264897123897 231241235 我如何用逗号分隔它的千位 我想要一个不仅
  • 了解使用无符号位板生成滑块移动的“o^(o-2r)”公式?

    我正在尝试做什么我正在尝试执行一些按位运算来创建国际象棋引擎 为了制作这个引擎 我需要能够生成棋子的动作 比如车 有一个方便的公式 https www chessprogramming org Subtracting a Rook from
  • 使用 ssh 检查远程计算机上是否存在目录

    这个问题已经发布 但我想知道是否有一种方法可以通过 ssh 直接从命令行而不是从脚本来知道远程计算机上是否存在目录 正如我在上一篇文章中看到的 如何通过 ssh 检查 dir 是否存在并将结果返回到主机 https stackoverflo
  • jQuery text() 在toggle() 上发生变化?

    我想制作一个根据其他元素可见性更改切换链接文本的脚本 因此 当 form 可见时 我希望 form container 的文本为 隐藏 而当它隐藏时 我希望文本为 显示 我尝试过这一行 if form is visible 另一种方式 if
  • 飞镖参考地图不改变地图

    我想知道为什么map1无法打印 a 2 b 3 就像map2一样 void main Map