为什么在迭代过程中需要“&”来解构元组列表?

2024-04-27

当迭代元组列表时,&需要使其发挥作用。因此这会起作用......

for &(a, b, c) in [("hello", 1.0, 5), ("world", 2.0, 2)].iter() {
    println!("{} {} {}", a, b, c);
}

但这不会...

for (a, b, c) in [("hello", 1.0, 5), ("world", 2.0, 2)].iter() {
    println!("{} {} {}", a, b, c);
}

// type mismatch resolving `<core::slice::Iter<'_, (&str, _, _)> as core::iter::Iterator>::Item == (_, _, _)`:
// expected &-ptr,
found tuple [E0271]

我确信这与我尚未完全内化的解构语法的复杂性有关。

您能解释一下 & 符号背后的语法真相吗?


这是因为iter数组的方法[T] http://doc.rust-lang.org/std/primitive.slice.html#method.iter返回一个。这就是为什么编译器说“expected &-ptr, found tuple [E0271]".

那么这是为什么呢?出色地,一般来说,你无法复制T。除非代码假设了更严格的限制T: Copy or T: Clone,它只能move类型的值T.

这对于数组来说是一个问题,因为无法将单个元素移出数组;这样做会使整个事情变得无效。

Aside: Vec和公司。通过实现额外的逻辑来解决这个问题unsafe块以使其正常工作。容器还可以提供into_iter这为您提供了一个增量迭代器consumes容器,允许您将值移出。

因为你想要数组iter工作方法all数组,而是依次生成对每个元素的不可变引用。

结果,你试图解构一个&(&str, f32, i32), not a (&str, f32, i32),因此额外的&。 Rust 不喜欢隐式,所以你必须明确地解构参考。这也有助于明确存在取消引用和一份副本发生在这里。

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

为什么在迭代过程中需要“&”来解构元组列表? 的相关文章

随机推荐

  • 增加 SQL 命令的命令超时

    我有一个小问题 希望有人能给我一些建议 我正在运行一个 SQL 命令 但由于数据量很大 该命令似乎需要大约 2 分钟才能返回数据 但默认的连接时间是 30 秒 我如何增加这个时间 并将其应用到这个命令 public static DataT
  • 如何保留操作/标题栏但隐藏通知栏

    如何保留操作 标题栏但隐藏通知栏 这个问题看起来已经得到了回答 但我发现的大多数答案都隐藏了操作栏和通知栏 我希望能够保留操作 标题栏 我得到的最好的方法是隐藏两者并使用线性布局来显示自定义操作 标题栏 但我想要一个系统生成的 另外 是否可
  • 是否可以用 R 编写音乐并播放? (Mac OS X)[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有一种方法可以用 r 编写脚本来创作音乐 就像编码程序 SuperCollider 或编码
  • 求解序言中极其简单的方程:A = B + C?

    我有一个非常简单的方程 我希望能够在序言中求解 A B C 我希望能够编写一个谓词来表达这种关系 它可以处理任何一个未实例化的参数 无需推广到更复杂的关系或方程 myEquation A B C something 我可以使用以下语义进行调
  • C# 中的多个 SQL 查询将变量作为列返回

    我正在开展一个创建注册系统的学校项目 我选择的数据库方法是使用 T SQL 因为它是我已经熟悉的东西 我正在使用下面的代码来查询数据库 public void button3 Click object sender EventArgs e
  • Python:在 Plotly 中的图形上方创建注释空间

    我想在图中创建额外的注释空间 请参阅附图中的绿色区域 目前 y 轴定义了绘图的高度 我可以将绘图推到超出 y max 限制 在某个点 在图像中标记为红色 之后隐藏 y 轴吗 我尝试避免轴到达 评论部分 绿色 谢谢你 在此输入图像描述 htt
  • Parsec-Parser 工作正常,但是可以做得更好吗?

    我尝试这样做 解析以下形式的文本 一些文本 0 0 0 一些文本 0 0 0 0 0 0 更多文本 0 0 0 进入一些数据结构的列表 内部 一些文本 外部 0 0 0 内部 一些文本 外部 0 0 0 外部 0 0 0 内部 更多文本 外
  • 用C#排列桌面图标

    好吧 伙计们 这就是我想要实现的目标 我希望所有无序的桌面图标在单击按钮时都排列在桌面的左上角 这是我正在使用的代码 DllImport user32 dll private static extern IntPtr GetDesktopW
  • jQuery UI 选项卡 - 如果相应的内容面板为空,如何删除选项卡列表项?

    我正在使用 cms 系统的基本 jQuery UI 选项卡设置 我想知道如果具有相应 id 的内容面板为空 是否可以隐藏导航选项卡 HTML div ul li a href tabs 1 Nunc tincidunt a li li a
  • Active Admin:如何设置页面标题?

    这看起来应该相对简单 但我在寻找答案时遇到了一些麻烦 如何在 ActiveAdmin 中设置页面标题 合并答案并添加一点 这大部分都在维基百科上的这个页面 https github com gregbell active admin wik
  • 在 Win7 上捆绑 Meteor 应用程序时出现 ENOTEMPTY 和 EPERM 异常? :(

    Help 我已经使用 Meteor 工作了大约两个月了 在我的 OSX 家庭环境中一切都进展顺利 但我最近将其中一些代码带入了工作中的 Windows 7 环境中 而 Meteor 在 Windows 上的行为却有所不同 具体来说 代码捆绑
  • 在 Prolog、尾递归中计算斐波那契数列

    我想在 Prolog 中以递归尾部模式计算斐波那契数列 fibonacci 0 0 fibonacci 1 1 fibonacci N Result fibonacci N 1 0 fibonacci N Result Count Coun
  • 什么是可用于 Web 应用程序的跨浏览器和跨操作系统安全键盘快捷键?

    我正在开发一个相当大的 Web 应用程序 对于一些常见任务使用热键可能是一个好主意 然而 我发现对于所有不同的浏览器和操作系统来说 找到安全的组合键是一个问题 For example Chrome has such a long list
  • phpunit 避免模拟的构造函数参数

    有什么方法可以避免 phpunit 调用模拟对象的构造函数 否则我需要一个模拟对象作为构造函数参数 另一个模拟对象作为构造函数参数 等等 api 似乎是这样的 getMock className methods array array ar
  • localizedStringWithFormat 如何工作?

    请注意 我不是在问NSLocalizedString 宏 我问的是NSString类函数 instancetype localizedStringWithFormat NSString format 这是两件不同的事情 Question 我
  • 如何提供准备好的 git 提交消息?

    按照惯例 我在 git 中创建故事分支 以在其中包含 Jira 问题 ID 例如FOO 1001 我有一个脚本可以帮我做到这一点 现在 我准备了另一个脚本 用于从 Jira API 获取 FOO 1001 的标题 我想在输入时实现这一目标
  • 生产中的 FirebaseRemoteConfigClientException (Android)

    到目前为止我做了什么 我在用Tasks await blocking https developers google com android guides tasks blocking工作线程中的 firebase 调用机制以避免回调 我正
  • 我的profiles.xml出了什么问题?

    这是我的一部分profiles xml for mvn
  • 如何使用ijkplayer库

    我要使用 ijkplayergithub链接 https github com bbcallen ijkplayer 我下载了这个 然后通过 文件 gt 导入 gt 常规 gt 现有项目到工作区 将其导入到 eclipse 中 之后我有三个
  • 为什么在迭代过程中需要“&”来解构元组列表?

    当迭代元组列表时 需要使其发挥作用 因此这会起作用 for a b c in hello 1 0 5 world 2 0 2 iter println a b c 但这不会 for a b c in hello 1 0 5 world 2