当前位置: 首页 > article >正文

Rust中::和.的区别

在 Rust 中,::. 是两种常用的操作符,它们的作用和语法用途不同。以下是详细的对比和解释:


1. ::(双冒号)

::路径操作符,主要用于访问模块、结构体、枚举、函数、常量等的命名空间中的成员。

主要用途
  • 模块路径
    用于引用模块或模块中的项:

    mod math {
        pub fn add(a: i32, b: i32) -> i32 {
            a + b
        }
    }
    
    fn main() {
        let result = math::add(5, 3); // 使用 :: 引用模块中的函数
        println!("Result: {}", result);
    }
    
  • 枚举成员
    用于访问枚举的变体:

    enum Direction {
        Up,
        Down,
        Left,
        Right,
    }
    
    fn main() {
        let dir = Direction::Up; // 使用 :: 引用枚举变体
    }
    
  • 静态方法和关联函数
    用于调用结构体、枚举或其他类型的静态方法或关联函数:

    struct MyStruct;
    
    impl MyStruct {
        fn new() -> MyStruct {
            MyStruct
        }
    }
    
    fn main() {
        let instance = MyStruct::new(); // 调用关联函数
    }
    
  • 常量和静态变量
    用于访问模块或类型中的常量和静态变量:

    const PI: f64 = 3.14159;
    
    fn main() {
        println!("Value of PI: {}", PI);
    }
    

2. .(点操作符)

.成员访问操作符,主要用于访问实例的属性和方法。

主要用途
  • 访问结构体字段
    用于访问结构体实例的字段:

    struct Point {
        x: i32,
        y: i32,
    }
    
    fn main() {
        let point = Point { x: 10, y: 20 };
        println!("Point: ({}, {})", point.x, point.y); // 使用 . 访问字段
    }
    
  • 调用方法
    用于调用实例方法(非关联函数):

    struct Circle {
        radius: f64,
    }
    
    impl Circle {
        fn area(&self) -> f64 {
            3.14159 * self.radius * self.radius
        }
    }
    
    fn main() {
        let circle = Circle { radius: 5.0 };
        println!("Area: {}", circle.area()); // 使用 . 调用实例方法
    }
    
  • 链式调用
    可以使用点操作符链式调用多个方法:

    fn main() {
        let text = "hello".to_uppercase().replace("HELLO", "Hi");
        println!("{}", text); // 输出:Hi
    }
    

总结对比

操作符用途示例
::用于访问命名空间中的成员,例如模块、函数、枚举变体、关联函数、常量等std::io::stdinVec::newOption::Some
.用于访问实例的字段或方法instance.fieldinstance.method()

综合示例

以下代码展示了 ::. 的综合用法:

struct MyStruct;

impl MyStruct {
    fn new() -> MyStruct { // 关联函数
        MyStruct
    }

    fn instance_method(&self) { // 实例方法
        println!("Called instance method");
    }
}

fn main() {
    // 使用 :: 调用关联函数
    let instance = MyStruct::new();

    // 使用 . 调用实例方法
    instance.instance_method();
}
输出
Called instance method

通过这些示例可以清楚地看到 ::. 的区别:

  • :: 是静态路径,用于访问命名空间内的内容。
  • . 是动态访问,用于实例的字段或方法。

http://www.kler.cn/a/402665.html

相关文章:

  • 轻松解析 PDF 文档:深入了解 Python 的 pdfplumber 库
  • anaconda pycharm 使用问题
  • Java基础面试题04:Iterator 和 ListIterator 的区别是什么?
  • uniapp 自定义popup 弹窗 简单封装(微信小程序)
  • 笔记记录 k8s-install
  • torch_geometric使用手册-Creating Message Passing Networks(专题二)
  • 自动化立体仓库:详解
  • jvm虚拟机基础学习笔记--黑马程序员--1
  • 聊聊Flink:Flink的分区机制
  • ssm144基于SSM的校园二手物品交易平台+vue(论文+源码)_kaic
  • 【算法一周目】滑动窗口(1)
  • 40分钟学 Go 语言高并发:Go语言核心回顾
  • Max × Sum:(枚举,大根堆,滑动窗口)
  • 自回归和Rectified Flow完美融合统一多模态理解和生成!DeepSeek北大等开源JanusFlow
  • Scala的Array习题
  • CSS3新特性——字体图标、2D、3D变换、过渡、动画、多列布局
  • 神经网络中常用的激活函数(公式 + 函数图像)
  • 【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读
  • 【系统架构设计师】真题论文: 论企业架构管理与应用(包括解题思路和素材)
  • Spring Boot教程之三:Spring Boot 与 Spring MVC 及 Spring的区别
  • 【TTS】OuteTTS初体验
  • 企业微信中设置回调接口url以及验证 spring boot项目实现
  • 二叉树的练习题(下)
  • Python-简单病毒程序合集(一)
  • 《 C++ 点滴漫谈 一 》C++ 传奇:起源、演化与发展
  • 【大数据学习 | Spark】详解分区个数