`mut a: &T` 和 `a: &mut T` 有什么区别? [复制]

2023-12-25

有人可以解释一下这两者之间有什么区别以及什么时候mut a: &T最常用?


Rust 中的函数参数和 let 绑定是正确的模式,就像左边的那些=>匹配(除了 let 和参数模式必须是无可辩驳的,即它们必须始终匹配)。mut a只是模式语法的一部分,这意味着a是一个可变绑定。&mut T/&T另一方面,是类型 - 可变或不可变引用。

有四种可能的组合mut在参考文献和模式中:

    a: &T      // immutable binding of immutable reference
mut a: &T      // mutable binding of immutable reference
    a: &mut T  // immutable binding of mutable reference
mut a: &mut T  // mutable binding of mutable reference

第一个变体是绝对不可变的(不考虑内部可变性)Cell并考虑到这一点)-你既不能改变什么a既不指向它当前引用的对象。

第二种变体允许您更改a指向其他地方,但它不允许您更改它指向的对象。

第三个变体不允许更改a指向其他东西,但它允许改变它引用的值。

最后一个变体允许两者改变a引用其他东西并改变该引用当前指向的值。

考虑到上述情况,您可以看到哪里mut a: &T可以使用。例如,您可以在循环中编写对字符串的一部分的搜索,以供进一步使用,如下所示:

let mut s: &str = source;
loop {
    // ... whatever
    s = &source[i..j];
}
// use the found s here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`mut a: &T` 和 `a: &mut T` 有什么区别? [复制] 的相关文章

随机推荐

  • 从 Android 中的原始文件夹设置铃声

    我正在尝试读取 访问 Raw 文件夹中的 mp3 文件 然后将其设置为默认铃声 但它无法找到它 我的代码是 Uri path Uri parse android resource com applenty LearnToCount raw
  • SwiftUI CoreData 异步获取

    我在 macOS 应用程序中使用 CoreData 和 SwiftUI 我主要利用的是 FetchRequest在 SwiftUI 中 向数据库发出我的请求 我注意到当数据库中有多个对象时 FetchRequest 需要更多时间 此外 我正
  • 从 Image.open 获得的数组,其中 np.asarray 是不可变的 - “赋值目标是只读的”

    我的目标是读取一组 PNG 文件 使用以下命令创建图像Image open filename 并将它们转换为只有 1 和 0 的简单二维数组 PNG 的格式为 RGBA 值大多只有 255 和 0 在图像中 边缘通常是灰度值 我想在二维数组
  • 事件处理程序中的图像调整器 User.Identity

    添加了一个 AuthorizeImage 事件处理程序来限制图像访问 当我尝试检查用户名和身份验证状态时注意到以下内容 下面不会导致异常 但似乎会破坏它 无论是否通过身份验证 都会显示未找到图像的默认图标 测试了 this User 相同的
  • ODP.NET是否需要安装Oracle客户端

    我必须从 NET 代码连接 Oracle 11g DB 为此 我安装了 ODP NET 但在阅读了一些论坛帖子后 我意识到我也需要安装 Oracle 客户端 真的吗 我看到 Oracle 客户端的大小为 ca 2GB 我真的需要安装这么大的
  • ConcurrentMap.remove() 是否在 get() 返回 null 之前提供happens-before 边?

    调用之前线程中是否有操作ConcurrentMap remove 保证发生在之前看到从另一个线程删除后的操作 文档 https docs oracle com javase 8 docs api java util concurrent p
  • 谷歌地图API只返回城市?

    我正在尝试使用 Google 地图 API 仅从 json 请求返回城市 https maps googleapis com maps api place autocomplete json input green 20lanes type
  • Spyder - UMD 已删除:模块

    我已经用 python 闲逛了大约一个月了 有些事情困扰着我 我使用 python x y 工具包 它附带了简洁的 Spyder IDE 我的问题涉及 Spyder 的 UMD 用户模块删除器 I found this http mcsp
  • ZonedDateTime.parse 不适用于解析 am 或 pm 时间

    我正在学习java 试图构建一个工具 根据用户输入 时间 时区A和时区B的输入 将特定时间从时区A转换为时区B 这是关于该工具以特定格式收集时间并将其转换为 ZonedDateTime 对象的部分 import java time Zone
  • 仅当总计数小于阈值时才将行插入 SQL Server 表中

    我正在使用 SQL Server 2012 我有一个存储用户的表 允许的最大用户数为 100 万 我有一个正在注册用户的存储过程 当我插入时 我想确保 users 表中的总行数不会超过 100 万 我更愿意使用允许最大并发性的方法 我相信我
  • 创建适用于 Windows 的用户和访问规则 Github

    我刚刚使用安装了 Githttp windows github com http windows github com 它似乎安装正确 但我无法创建新用户和访问控制设置来访问存储库 我试图查看文档 但不包含类似的内容 我不确定 Window
  • 在 EJS 中循环 JSON

    我在下面的 EJS 中有代码 tr td td tr 行的输出是正确的 是一个由 3 个对象组成的数组 每个对象都有属性 id 名称等 我可以操作该行来填充 JS 中的表 但是 我想知道是否有办法可以按照上述方式完成它 当我运行上面的代码时
  • 以编程方式停止并重新启动 Express 服务器(以更改端口)

    我希望能够基本上更改我的 Express 应用程序正在运行的端口 我试过了 server on close function server listen 3000 server listen 8080 server close 这会返回一个
  • 当推送到github时,为什么git不要求我输入用户名和密码?

    这可能是个愚蠢的问题 但我通过搜索找不到任何关于此的信息 也许 这是一个愚蠢的问题 我已将我的代码存储在 github 中 2小时前 我想更新存储库中的代码 但我的本地没有该代码 所以我克隆了它 修改了代码 然后推送了它 这时候git提示我
  • 如何以编程方式设置 ASP.NET ReportViewer 控件的数据源?

    如何以编程方式设置 ASP NET ReportViewer 控件的数据源 我有一个 VS 2008 ReportViewer 控件 想要在几个不同的报告之间切换 我可以通过设置报表源和刷新控件来切换报表 但我看不到在哪里设置数据源 每个报
  • 如何在 Android 布局中创建覆盖按钮

    我想创建一个将在两个布局之间叠加的按钮 我正在使用线性布局并为其添加适当的权重 附上屏幕截图以供参考 这是我的 XML 标签 xml
  • ZeroMQ 中的 N 到 N 异步模式?

    尽管我阅读了该指南 但我找不到执行以下操作的方法 我们有n个出版商 我们有 m 个订户 每个订阅者订阅某种类型的消息 一个发布者可以发送多种消息 多个发布者可以发出相同类型的消息 如何在 0MQ 中创建 N 到 N 或 N 到 1 到 N
  • GOF 和 GRASP 设计模式有什么区别

    我真的很困惑 GOF 和 GRASP 模式之间的区别 甚至两者都有助于改进面向对象的实践 简答 GoF被提到设计模式 And GRASP are 设计原则 设计原则比设计模式更抽象 长答案 软件工程的主要目的是开发合适的软件 SDLC ht
  • 如何将每个方面的总样本量添加到geom_histogram?

    I want to add total sample size of each facet to geom histogram Expect output as below After read this post https stacko
  • `mut a: &T` 和 `a: &mut T` 有什么区别? [复制]

    这个问题在这里已经有答案了 有人可以解释一下这两者之间有什么区别以及什么时候mut a T最常用 Rust 中的函数参数和 let 绑定是正确的模式 就像左边的那些 gt 匹配 除了 let 和参数模式必须是无可辩驳的 即它们必须始终匹配