Rust 中Self 关键字的两种不同用法

在 Rust 中,Self 是一个特殊的类型标识符,它代表了当前结构体或枚举类型。在结构体或枚举类型的定义中,Self 可以用于表示该类型的任何地方,包括方法签名、构造函数、类型别名等。

  1. 构造函数中的 Self: 在这段代码中:
 pub fn new(_session_id: u32, _channel_id: u32) -> Self {
       Self {
           // ...
       }
   }

这里的Self是结构体或枚举类型的占位符。在构造函数new的返回类型和内部实例化部分使用Self时,它代表的是当前实现这个方法的结构体或枚举类型本身。所以在这个上下文中,Self { ... } 创建了一个新的结构体实例,并初始化了所有字段。

在以下代码中,Self { value: 42 } 是一个构造函数,用于创建一个 Example 结构体的新实例,其中value成员变量被初始化为 42

struct Example {
    value: i32,
}

impl Example {
    fn new(value: i32) -> Self {
        Self { value }
    }
}

在给定的代码片段中,Self { … } 表示的是当前结构体或枚举类型的构造函数。它用于创建一个新的实例,并且可以接受一些参数来初始化该实例的成员变量。

  1. 关联函数(非方法)中的 self 或 &self、&mut self 等: 在方法签名中,如:
 fn some_method(&self) {}

这里的 self 表示方法接收者。在方法定义中,self、&self 和 &mut self 分别表示:

  • self: 消耗所有权,意味着调用此方法会移动结构体的所有权.
  • &self: 获取结构体的一个不可变引用,允许访问但不修改结构体内容。
  • &mut self: 获取结构体的一个可变引用,允许在方法执行期间修改结构体内容。

相关推荐

  1. Rust Self 关键不同

    2024-03-20 21:20:04       44 阅读
  2. C语言volatile关键

    2024-03-20 21:20:04       43 阅读
  3. C++const关键多种

    2024-03-20 21:20:04       38 阅读
  4. C++ explicit关键

    2024-03-20 21:20:04       69 阅读
  5. C++ new关键一些特殊

    2024-03-20 21:20:04       36 阅读
  6. Rust .expect()

    2024-03-20 21:20:04       32 阅读
  7. Rust语言带标签`break`

    2024-03-20 21:20:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 21:20:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 21:20:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 21:20:04       82 阅读
  4. Python语言-面向对象

    2024-03-20 21:20:04       91 阅读

热门阅读

  1. Cuckoo沙箱环境使用介绍

    2024-03-20 21:20:04       38 阅读
  2. computed

    2024-03-20 21:20:04       39 阅读
  3. 3月20日:子集Ⅱ、非递减子序列

    2024-03-20 21:20:04       44 阅读
  4. Android AMS——进程优先级更新(二十)

    2024-03-20 21:20:04       44 阅读
  5. FreeRTOS 简介

    2024-03-20 21:20:04       40 阅读
  6. 【Docker】常用命令 docker images

    2024-03-20 21:20:04       38 阅读