rust 初探 -- 路径(path)

rust 初探 -- 路径Path

路径(Path)

  • 目的:为了在 Rust 的模块中找到某个条目,需要使用 路径
  • 两种形式:
    • 绝对路径:从 crate root 开始,使用 crate 名或字面值 crate
    • 相对路径:从当前模块开始,使用 self,super 或当前模块的标识符
  • 路径至少由一个标识符组成,标识符之间使用 ::
    示例:
rust 复制代码
mod front_of_house {
	// pub mod hosting {
    mod hosting {
    	// fn add_to_waitlist() {}
        fn add_to_waitlist() {}
    }
}

pub fn eat_at_restaurant() {
    //使用绝对路径调用
    crate::front_of_house::hosting::add_to_waitlist();
    // --------------- function `add_to_waitlist` is not publicly re-exported
    // 因为是私有的

    //使用相对路径调用
    front_of_house::hosting::add_to_waitlist();
}

私有边界(privacy boundary)

  • 模块不仅可以组织代码,还可以定义私有边界
  • 如果想把函数或struct 等设为私有,将其放到某个模块中即可
  • Rust 中所有的条目默认是私有的
  • 父级模块无法访问子模块中的私有条目
  • 子模块里可以使用所有祖先模块中的条目
pub 关键字
  • 使用 pub 可以将某些条目设置为公共的

super 关键字

  • 用于访问父级模块路径中的内容,相当于文件目录中的 ...
rust 复制代码
fn sever_order() {}

mod back_of_house {
    fn fix_incorrect_order() {
        cook_order();
        super::sever_order();//进入到模块外面
        // crate::sever_order();
    }

    fn cook_order() {}
}

pub struct

  • pub 放在 struct 之前:struct 是公共的,里面的字段默认不是公共的(除非加上 pub)
rust 复制代码
mod back_of_house {
    pub struct Breakfast {
        pub toast: String,
        fruit: String,
    }

    // 关联函数
    impl Breakfast {
        pub fn summer(toast: &str) -> Breakfast {
            Breakfast {
                toast: String::from(toast),
                fruit: String::from("peach"),
            }
        }
    }
}

pub fn eat_at_restaurant() {
    let mut meal = back_of_house::Breakfast::summer("rye");
    meal.toast = String::from("wheat");
    // meal.fruit = String::from("apple");//field `fruit` of `Breakfast` is private
    println!("{}", meal.toast)
}

上述示例中,meal.toast 可以访问,但是meal.fruit 因为是私有的,不能访问。

pub enum

  • 和 struct 不一样,如果枚举是公共的,那么它里面的所有枚举默认就是公共的
相关推荐
爱上咖啡香34 分钟前
我给 Laravel AI 写了个千问驱动,文本、语音、图像、视频全打通
后端
杨文说AI与数字化41 分钟前
票种表重构复盘:把填数字改成规则可执行版本
后端
回家路上绕了弯1 小时前
什么是 Agent as a Service?把 AI Agent 变成可调用的服务
后端
金銀銅鐵2 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
qq_406981032 小时前
c++拷贝构造函数
开发语言·c++
爱喝雪碧的可乐3 小时前
MATLAB
开发语言·算法·matlab
用户360055579003 小时前
Kestrel_VLLM - 34 · 批量 M 行:五个块、两种层型,与「退回去」的两个原语
后端
leo在掘金3 小时前
25.5k Star 的 DeepInfer 怎么扛住3万亿参数
后端·架构
unconditional3 小时前
我拆了 sdkm 的回滚设计:每个写操作,都提前写好了翻车预案
rust·开源
Agent世界4 小时前
cookie 判据会撒谎:CDP 登录态保活的五个实测坑
后端·自动化运维