有没有办法对结构实例执行索引访问?

2023-12-24

有没有办法对结构实例执行索引访问,如下所示:

struct MyStruct {
    // ...
}

impl MyStruct {
    // ...    
}

fn main() {
    let s = MyStruct::new();
    s["something"] = 533; // This is what I need
}

您可以使用Index https://doc.rust-lang.org/std/ops/trait.Index.html and IndexMut https://doc.rust-lang.org/std/ops/trait.IndexMut.html traits.

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

struct Foo {
    x: i32,
    y: i32,
}

impl Index<&'_ str> for Foo {
    type Output = i32;
    fn index(&self, s: &str) -> &i32 {
        match s {
            "x" => &self.x,
            "y" => &self.y,
            _ => panic!("unknown field: {}", s),
        }
    }
}

impl IndexMut<&'_ str> for Foo {
    fn index_mut(&mut self, s: &str) -> &mut i32 {
        match s {
            "x" => &mut self.x,
            "y" => &mut self.y,
            _ => panic!("unknown field: {}", s),
        }
    }
}

fn main() {
    let mut foo = Foo { x: 0, y: 0 };

    foo["y"] += 2;
    println!("x: {}", foo["x"]);
    println!("y: {}", foo["y"]);
}

它打印:

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

有没有办法对结构实例执行索引访问? 的相关文章

随机推荐

  • 知道何时在序言中使用剪切

    我参加了一门课程 在其中学习了一些序言 我不知道如何 何时使用剪切 尽管我了解了剪切的一般概念 但我似乎无法正确使用它们 任何人都可以简要解释一下或提供一个关于他们可以推荐的 剪辑 的好教程 不是 learnprolognow org 吗
  • 使用 php mysqli 检查电子邮件是否存在[重复]

    这个问题在这里已经有答案了 我是 mysqli 的新手 我想用 php 和 mysqli 检查数据库中是否已存在电子邮件 这是我到目前为止所做的 ini php 连接 php 注册 php
  • 如何在 C# 中播放提取的波形文件字节数组?

    目前 我已成功分离 WAVE 文件的左声道和右声道 并将标题包含在 byte 数组中 我的下一步是要播放两个频道 如何才能做到这一点 这是一个代码片段 byte song left new byte fa Length byte song
  • QuickType 预测会考虑应该被我的 UITextFieldDelegate 阻止的击键

    我有一个文本字段 我不想在其中允许前导空格 所以我实施了textField textField shouldChangeCharactersInRange replacementString 并阻止将文本更改为以空格开头的内容的尝试 这按预
  • CodeIgniter 2 不允许控制器存在多级子文件夹

    当我读到doc http ellislab com codeigniter user guide general controllers html CodeIgniter 中的控制器应该支持多级子文件夹 但据我测试 在第一个一级文件夹之后是
  • 为什么 -0.0 与 0.0 不同?

    I could be missing something fundamental but consider this interpreter session1 gt gt gt 0 0 is 0 0 False gt gt gt 0 0 i
  • 让 python 程序等待 Twisted deferred 返回值

    我有一个程序可以从其他页面获取信息并使用 BeautifulSoup 和 Twisted 的 getPage 来解析它们 稍后在程序中我打印延迟进程创建的信息 目前 我的程序尝试在不同的返回信息之前打印它 我怎样才能让它等待 def twi
  • 有人在 Matplotlib 中制作了 Parula 颜色图吗?

    我知道有一些关于 Matlab 对其新的默认颜色图进行版权保护的讨论 http sourceforge net p matplotlib mailman message 32953371 但我想知道是否有勇敢的用户在 Matplotlib
  • 如何根据对应的值过滤字典键

    I have dictionary foo 12 bar 2 jim 4 bob 17 我想迭代这个字典 但迭代的是值而不是键 这样我就可以在另一个函数中使用这些值 例如 我想测试哪些字典值大于6 然后将它们的密钥存储在列表中 我的代码如下
  • ConfigObj/ConfigParser 与使用 YAML 作为 Python 设置文件

    对于为Python程序创建设置文件 内置模块 ConfigParser 或独立项目 ConfigObj 还是使用YAML数据序列化格式 哪个更好 我听说 ConfigObj 比 ConfigParser 更容易使用 尽管它不是内置库 我还了
  • ASP.NET MVC 2 验证应该去哪里:模型还是视图模型类?

    我正在使用自动映射器将我的模型映射到视图模型类以传递到我的视图 我的问题实际上是验证应该去哪里 我计划使用元数据装饰 mvc 2 的一个功能 但无论是在模型中还是在视图模型中 还是两个地方都有 验证应该至少在视图模型中完成 因为这是您作为操
  • 在 WPF 中单击按钮时使用不同内容更新列表框

    所以我的 WPF 应用程序中有一个列表框和一个工具栏 工具栏只有常规控件 列表框有垂直扩展器 我需要列表框有一组不同的扩展器 具体取决于单击的按钮 现在看起来是这样的
  • 一个简单的游戏的代码如何布局? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的背景主要是开发网站 也许还有一些简单的基于表单的应用程序 MVC 对此很有效 但我不太明白它如何适用于游戏 那么你们是怎么做到的呢
  • 如何以编程方式关闭系统对话框,例如“想要访问您的照片”?

    有没有一种方法可以以编程方式关闭对话框 例如应用程序想要访问照片 访问联系人和访问位置的对话框 我认为有一种方法可以通过调整 API 方法来实现 但我真的不知道是哪一种 找出哪些方法需要调整的方法是什么 如果 swizzling 不是方法
  • Spring Boot WebSocket - 如何获取客户端订阅通知

    我有一个包含大量组的应用程序 其中我的服务器使用消息队列 RabbitMQ 来观察组并在通过 WebSocket 进行更改时向用户发布通知 我正在使用 Spring boot 及其受本指南启发的 WebSocket 实现 https spr
  • 使用 Django 生成 CSV 文件(动态内容)

    在我的 view py 中 我有两个函数 一个函数处理来自表单的输入并输出过滤后的列表 另一个函数应该将此列表导出到 CSV 这是我的第一个函数的返回 return render to response templateX html que
  • Node.js / Express 响应事件

    我正在尝试创建一个记录响应时间和状态代码并将其发送到数据库的中间件 但是 我不确定要使用什么事件 在节点的文档中有一个close事件 但它从未被触发 end也不行 然而 header确实如此 但我找不到任何文档 app use functi
  • Spring:如何解决验证错误 -> 错误代码 -> 错误消息

    在 Spring 中 验证后我们得到一个BindingResult对象在controller 很简单 如果我收到验证错误 我想重新显示我的表单 并在每个受影响的字段上方显示错误消息 因此要检查字段上的字段错误username of my F
  • 客户端在 nginx 中发送到客户端时过早关闭连接

    我在 nginx error log 中有错误 2010 12 05 17 11 49 info 7736 0 1108 client closed prematurely connection while sending to clien
  • 有没有办法对结构实例执行索引访问?

    有没有办法对结构实例执行索引访问 如下所示 struct MyStruct impl MyStruct fn main let s MyStruct new s something 533 This is what I need 您可以使用