如何使用“index_mut”来获取可变引用?

2024-06-19

即使当我实施IndexMut对于我的结构,我无法获得对结构内部向量元素的可变引用。

use std::ops::{Index, IndexMut};

struct Test<T> {
    data: Vec<T>,
}

impl<T> Index<usize> for Test<T> {
    type Output = T;
    fn index<'a>(&'a self, idx: usize) -> &'a T {
        return &self.data[idx];
    }
}

impl<T> IndexMut<usize> for Test<T> {
    fn index_mut<'a>(&'a mut self, idx: usize) -> &'a mut T {
        // even here I cannot get mutable reference to self.data[idx]
        return self.data.index_mut(idx);
    }
}

fn main() {
    let mut a: Test<i32> = Test { data: Vec::new() };
    a.data.push(1);
    a.data.push(2);
    a.data.push(3);
    let mut b = a[1];
    b = 10;

    // will print `[1, 2, 3]` instead of [1, 10, 3]
    println!("[{}, {}, {}]", a.data[0], a.data[1], a.data[2]);
}

我该如何使用index_mut获得可变引用?是否可以?


你快到了。改变这个:

let mut b = a[1];
b = 10;

to this:

let b = &mut a[1];
*b = 10;

索引语法返回值本身,而不是对其的引用 https://stackoverflow.com/q/27879161/155423。你的代码提取了一个i32来自向量并修改变量 - 当然,它不会影响向量本身。为了通过索引获取引用,需要显式地编写。

这是很自然的:当您使用索引来访问切片或数组的元素时,您获得的是元素的值,而不是对它们的引用,并且为了获得引用,您需要显式地编写它。

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

如何使用“index_mut”来获取可变引用? 的相关文章

随机推荐

  • 有没有办法避免自动更新 Rails 时间戳字段?

    如果您有数据库列created at and updated at当您创建和更新模型对象时 Rails 将自动设置这些值 有没有办法在不接触这些列的情况下保存模型 我正在引入一些旧数据 我想根据 不同名称的 旧数据字段中的相应值设置这些值
  • 无法访问类型的封闭实例。 [复制]

    这个问题在这里已经有答案了 整个代码是 public class ThreadLocalTest ThreadLocal
  • 带有 jQ​​uery 日期选择器 OnTextChanged 的​​文本框未触发

    我有一个带有 OnTextChanged 事件的 asp textbox 当从绑定到它的 jQuery 日期选择器中选择新日期时 我想触发该事件 但在选择日期时 OnTextChanged 永远不会触发 如果我 手动 更改文本 它会触发 但
  • 字符串模板:使所有变量声明全局

    我正在尝试使用 ANTLR StringTemplate 实现翻译器 我有一种类似于 java 的起始语言和多种目标语言 我用了这个例子 http www antlr org wiki display ST Language Transla
  • 如何设置 tmux 在启动时打开指定的窗口?

    如何设置 tmux 使其在启动时打开指定的窗口 您可以编写一个小 shell 脚本来启动 tmux 以及所需的程序 我在一个名为 dev tmux 的 shell 脚本中包含以下内容 开发环境 bin sh tmux new session
  • 检测输入何时具有“只读”属性

    我想在输入具有 只读 属性时发出警报 我已经尝试过这个 if input attr readonly readonly alert foo 我认为 如果 甚至不是最好的方法 最快的方法是使用 is jQuery 函数 if input is
  • 使用 include 的 Javascript 过滤对象

    我正在尝试使用 javascript 中的 filter 函数来过滤对象 我想过滤这样的数组 1615 1616 它在代码中被引用为 value verdier 数据集是一个大型数组 包含从 JSON 字符串解析的具有多个属性的对象 数组中
  • 将箱线图添加到Python中的其他图表中

    这两个图的每个点的 x 轴值完全相同 是否可以在第一个图的顶部显示盒须 我试过这个 fig1 plt figure ax fig1 add subplot 211 ax set xscale log ax plot x7 y7 c ax p
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • 如何发布数组多维角度js

    我在 angularjs 中有一个数组 示例如下 scope order qty 20 scope order adress Bekasi scope order city Bekasi 这个数组可以用这个代码发布 http method
  • x86 asm 的 NASM 语法中的括号是什么意思?

    给出以下代码 L1 db word 0 mov al L1 mov eax L1 括号里是什么意思 L1 代表 这个问题专门针对 NASM Intel 语法汇编的另一个主要风格是 MASM 风格 当不涉及寄存器时 括号的工作方式有所不同 S
  • artisan 明确编译返回错误代码 255

    跑步时composer install在我的 laravel 项目中 我收到错误 脚本 php artisan 清晰编译处理返回的 post install cmd 事件 错误代码为 255 关于可能出现的问题有什么建议吗 请注意 comp
  • 如何在不下载内容的情况下执行 GET 请求?

    我正在开发一个链接检查器 一般来说我可以执行HEAD请求 但是有些网站似乎禁用了这个动词 所以在失败时我还需要执行GET请求 仔细检查链接是否确实已失效 我使用以下代码作为我的链接测试器 public class ValidateResul
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 如何在缩进层次结构中找到父级?

    我目前有一张 Excel 工作表 其中包含缩进的项目层次结构 如下所示 每个项目都缩进 每个缩进四个空格 以显示它如何适应整体层次结构 我已经能够创建一个 级别 列 将缩进级别转换为数字 Item Level Parent P1 1 N A
  • Azure Functions 无法与队列触发器一起使用

    预先感谢任何可以提供帮助的人 我正在使用队列触发器在 Azure 中创建以下函数 FunctionName SubmitJob public static async Task Run ServiceBusTrigger jobs Conn
  • Bundle exec rspec VS rspec 规范

    红宝石 1 9 2 导轨 3 1 这是问题所在bundle exec rspec spec 不起作用 但是rspec spec 运行正常 当我跑步时c RailsInstaller work apptwit gt bundle exec r
  • 在 main 之前执行任何函数[重复]

    这个问题在这里已经有答案了 我想在 main 之前执行用户定义函数 是否可以先执行一个函数main in c sum int a int b return a b g sum sum 1 5 main sum 5 6 printf d g
  • 将变量设置为函数调用以在 PHP 中的 if 语句中使用

    好的 我正在做一些 Wordpress 编辑 并且编写了一个 if 语句 正如您所看到的 这使用函数调用作为变量 这是因为函数调用会调用当前页面的名称 这很好 然而 当我这样做时 它也往往会与页面上的标题相呼应 这是有道理的 我可能正在尝试
  • 如何使用“index_mut”来获取可变引用?

    即使当我实施IndexMut对于我的结构 我无法获得对结构内部向量元素的可变引用 use std ops Index IndexMut struct Test