查看: 51|回复: 0

[教程] Rust中::和.的区别解析

[复制链接]

5

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-1-2
发表于 2024-11-22 09:32:07 | 显示全部楼层 |阅读模式

在 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

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

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

到此这篇关于Rust中::和.的区别的文章就介绍到这了,更多相关Rust ::和.的区别内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!

您可能感兴趣的文章:
  • Rust错误处理之`foo(...)?`的用法与错误类型转换小结
  • Rust文件 launch.json作用大全
  • Ubuntu18.04本地化部署Rustdesk服务器的详细过程
  • 使用Rust语言管理Node.js版本
  • Rust调用函数操作符 . 和 :: 的区别详解
  • 关于Rust编译时报link.exe not found错误问题
  • 完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部