首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在库中拥有带有pub(crate)方法的公共特征?

在Rust编程语言中,pub(crate)关键字用于指定一个项(函数、结构体、枚举等)在当前crate中可见,但对于其他crate不可见。pub(crate)方法是指在一个模块中定义的公共方法,但只能在当前crate中的其他模块中访问。

要在库中拥有带有pub(crate)方法的公共特征,可以按照以下步骤进行:

  1. 创建一个Rust库项目,可以使用cargo new命令初始化一个新的库项目。
  2. 在项目的根目录下创建一个src文件夹,并在其中创建一个lib.rs文件。
  3. lib.rs文件中定义一个模块,并在该模块中定义带有pub(crate)方法的公共特征。例如:
代码语言:txt
复制
mod my_module {
    pub(crate) fn my_public_function() {
        // 公共方法的实现
    }
}
  1. lib.rs文件中使用pub use语句将该模块公开给库的使用者。例如:
代码语言:txt
复制
pub use my_module::my_public_function;
  1. lib.rs文件中编写其他公共特征,如结构体、枚举等,并使用pub关键字将其公开给库的使用者。
代码语言:txt
复制
pub struct MyStruct {
    // 结构体的字段和方法
}

pub enum MyEnum {
    // 枚举的成员
}
  1. lib.rs文件中编写库的文档注释,并使用/////!注释格式为每个公共特征提供文档。
代码语言:txt
复制
/// 这是一个示例库,包含带有pub(crate)方法的公共特征。
///
/// # 使用示例
///
/// ```rust
/// use my_library::my_public_function;
///
/// my_public_function();
/// ```
  1. Cargo.toml文件中添加库的元数据,如名称、版本等。
代码语言:txt
复制
[package]
name = "my_library"
version = "0.1.0"
edition = "2021"

[lib]
name = "my_library"
path = "src/lib.rs"

完成上述步骤后,你就拥有了一个带有pub(crate)方法的公共特征的Rust库。其他开发者可以使用该库,并通过导入相应的模块或使用pub use语句来访问其中的公共特征。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Rust crate与模块

我们还将涵盖其他与 Rust crate 结构和分发有关主题,包括如何记录与测试 Rust 代码、如何消除不必要编译器警告、如何使用 Cargo 管理项目依赖项和版本控制、如何在 Rust 公共...图 8-1:一个 crate 及其依赖 弄清楚 crate 是什么以及它们如何协同工作最简单途径是,使用带有 --verbose 标志 cargo build 来构建具有某些依赖项现有项目。...rlib 文件还包含此 crate 公共内联函数、泛型和宏这三者副本,在 Rust 知道我们将如何使用它们之前,这些特性无法完全编译为机器码。...我们声明了两个新子模块: // 在plant_structures/stems.rs pub mod xylem; pub mod phloem; 这 3 种选项(模块位于自己文件、模块位于自己带有...src/lib.rs 代码构成了库根模块。其他使用这个库 crate 只能访问这个根模块公共语法项。

15810
  • Rust学习笔记之包、Crate和模块

    一个包会包含有一个 Cargo.toml 文件,阐述如何去构建这些 cratecrate 是一个「二进制项或者库」。...同样,Cargo 知道如果包目录包含 src/lib.rs,则包带有与其同名库 cratelibrary crate,且 src/lib.rs 是 crate 根。...❝通过将文件放在 src/bin 目录下,一个包可以拥有「多个二进制」 crate:每个 src/bin 下文件都会被编译成一个独立二进制 cratebinary crate。...eat_at_restaurant 函数是我们 crate一个「公共 API,所以我们使用 pub 关键字来标记它」。...❝Rust 「默认所有项」(函数、方法、结构体、枚举、模块和常量)都是私有的。 「父模块项不能使用子模块私有项,但是子模块项可以使用他们父模块项」。

    94010

    rustpackage,crate,module

    一个package会包含一个 Cargo.toml 文件,阐述如何去构建这些 crate。package可以包含至多一个库 crate(library crate)。...同样,Cargo 知道如果包目录包含 src/lib.rs,则package带有与其同名crate,且 src/lib.rs 是 crate 根。...换句话说,我们拥有 hosting 模块和 add_to_waitlist 函数正确路径,但是 Rust 不让我们使用,因为它不能访问私有片段。...这样一来,你就知道可以更改内部代码哪些部分而不会破坏外部代码。不过 Rust 也提供了通过使用 pub 关键字来创建公共项,使子模块内部部分暴露给上级模块。...如果你计划让eat_at_restaurant 函数成为 crate一个公共 API,那么还需要在eat_at_restaurant函数前加上pub

    59250

    如何在Rust操作JSON

    由于文章篇幅原因,我们就没详细介绍这块内容,而今天我们就抽空聊聊这个话题。-- 「如何在Rust操作JSON,以及对最流行库进行比较」 好了,天不早了,干点正事哇。...类似地,我们还可以从JSON「IO流」读取JSON并将其转换为结构体,使用.from_reader()方法。...与 simd-json 类似,这个库中使用了相当多不安全代码。然而,如果我们在库搜索不安全代码,我们会发现比之前不安全代码可能更多。...例如,如果我们想要一个 JSON 字符串文字,我们可以在反序列化时使用 LazyValue 类型将其转换为一个仍然带有斜杠 JSON 字符串值。...尽管 sonic-rs 是一个非常快库,但它也是一个较新 crate,因此某些方法,如 from_reader(允许从 IO 流读取)在 crate 缺失。

    19910

    Rust FFI 编程 - bindgen 使用示例

    当我们拥有一组具有良好声明头文件时,自己定义 C 库 Rust FFI 绑定函数是毫无意义。我们可以使用 bindgen 这种工具从 C 库头文件生成 Rust FFI 绑定函数。...本文我们将通过一个示例,讨论如何使用 bindgen 将 C 库函数公开给 Rust。...我们目标是创建一个 crate 项目,其中包含一个bindings.rs文件,该文件代表 C 库公共 API(包括函数,结构体,枚举等),然后通过将该 crate 导入其它项目中来调用原 C 库功能...同时,bindgen会将 C const指针转换为Rust const *,并将没有修饰符 C 指针转换为mut *。...如果生成绑定,我们可以通过以下几种方式对结构体,枚举等进行调整: 使用build.rs时,通过bindgen::Builder配置方法

    2K100

    【译】设计优雅 Rust 库 API

    RFC 344 定义了一些有意思约定,比如: 如何方法名称引用类型名称(如 &mut [T] 变成 mut_slice、*mut T 变成 mut ptr), 如何命名返回迭代器方法, getter...更多方法名称约定 除了 RFC 199 和 RFC 344 (见上)规定以外,还有一些其他关于如何选择方法名称约定,目前还没有在 RFC 中提及。...幸运是,Rust “孤儿规则(orphan rules)” 赋予了为任何类型实现任何 trait 能力——前提是类型和 trait 任意一个是在当前 crate 定义。...hyper::server 文档更详细地解释了这是如何实现。...:高度抽象并且拥有良好文档 crate 其他设计模式 我在这里介绍是编写接口设计模式,即面向用户 API。

    1.7K30

    Rust API 指南:文档

    所有条目都应有一个rustdoc示例(C-EXAMPLE) 每个公共模块,特型,结构,枚举,函数,方法,宏和类型定义都应具有一个示例,用于该功能练习。 该准则应在合理范围内适用。...这也适用于trait方法--实现允许或预期返回错误trait方法应在“错误”部分进行记录。 例如在标准库,std::io::Read::read trait方法某些实现可能返回错误。...这也适用于trait方法-实现允许或预期产生恐慌traits方法应在“ Panics”部分记录。 在标准库,Vec::insert方法可能会出现恐慌。...html_root_url属性告诉rustdoc在编译下游crates时如何crate项目创建URL。没有它,依赖于您cratecrate文档链接将不正确。 #!...target=https%3A//github.com/rust-lang/rfcs/blob/master/text/1422-pub-restricted.md) 是另一个用于从公共API删除实现细节好工具

    2K30

    rust 模块组织结构

    rust约定在Cargo.toml同级目录下包含src目录并且包含main.rs文件,就是与包同名二进制crate,如果包目录包含src/lib.rs,就是与包同名crate。...crate根用来描述如何构建crate文件。比如src/main.rs或者src/lib.rs就是crate根。crate根文件将由Cargo传递给rustc来实际构建库或者二进制项目。...带有Cargo.toml文件包用来描述如何构建crate,一个包可以最多有一个库crate,任意多个二进制crate。...但是父模块代码不能访问子模块私有代码。 mod say { pub fn hello() { println!("Hello, world!")...("hi there"); } } } 调用模块内方法,可以使用绝对路径以crate开头,也就是从crate根开始查找,say模块定义在crate根 src/main.rs

    1.6K20

    Rust中使用模块组织代码

    例如,我们在上一章实现猜数字游戏就使用了 rand 依赖,这个 rand 就是一个 Crate,并且是一个库 Crate。...比较常用三种 pub 写法: pub:成员对模块可见 pub(self):成员对模块内子模块可见 pubcrate):成员对整个 crate 可见 如果不使用 pub 声明,成员默认可见性是私有的...("{}", mod1::CrateEnum::Item as u32); } ---- 结构体可见性 结构体字段和方法默认是私有的,通过加上 pub 修饰语可使得结构体字段和方法可以在定义结构体模块之外被访问...要注意,与结构体同一个模块代码访问结构体字段和方法并不要求该字段是可见: mod mod1 { pub struct Person { pub name: String,...关键字相对路径对模块进行访问: super:上层模块 self:当前模块 当上层模块,当前模块或子模块拥有相同名字成员时,使用 super 与 self 可以消除访问时歧义: fn function

    56610

    Rust学习笔记之面向对象编程

    类 (Class) 定义对象模板或蓝图,「描述了对象属性和行为」。 封装 (Encapsulation) 将数据和操作数据方法封装在类,「隐藏内部实现细节,提供公共接口」。...抽象 (Abstraction) 将问题简化为类、对象和方法模型,提取关键特征和行为形成可重用模型。...虽然带有方法结构体和枚举并不被称为「对象」,但是他们提供了与对象相同功能。...❝在Rust,可以使用 pub 关键字来决定模块、类型、函数和方法是公有的,而「默认情况下其他一切都是私有的」。...❞ 近来继承作为一种语言设计解决方案在很多语言中失宠了,因为其时常带有「共享多于所需」代码风险。「子类不应总是共享其父类所有特征,但是继承却始终如此」。

    23330

    Rust代码组织:packagecratemod

    从最后2行输出来看,运行是main.rs方法,即:main2.rsmain函数,并未识别成入口,继续折腾,在src下创建目录bin,然后把main.rs以及main2.rs都移动到bin目录...,尝试调用a模块方法,以及其子模块b方法 编译一下,会发现各种报错: ----------------------------------------------------- (base) ➜...("foo_a_2"); } //修改2:加pub pub mod b { pub fn foo_b() { //修改3:调用父mod方法...可以先记一条规则 :如果模块x与main方法在一个.rs文件,且x处于最外层,main方法可以调用x方法。...mod a; pub mod b; 然后b.rs引用a模块时,路径也要有所变化: pub mod b { use crate::abc::a::a::foo_a_2; pub fn

    1.6K10

    Rust 模块化:深入了解 Rust 代码组织

    本文是一篇Rust基础文章,如果下面的问题对你不是问题,就不要浪费时间阅读这篇文章了,做些更有意义事情吧。关键字mod、pubcrate、self、super、use都表示什么含义,如何使用?...模块化模块化是对代码一层一层封装。面向对象语言中提供class也算是一种模块化技术,有些语言使用namespace定义命名空间也是一种模块化技术,让我们看看Rust模块化是如何设计。...因此,我们可以把rust依赖包叫做crate package,但Rust社区习惯上都是叫crate。...;}使用use json::*批量引入json模块全部方法或结构。这样依赖我们就可以直接调用encode方法了,use主要减少重复写模块名问题,类似其它语言中import引入包名。...关键字pub 用于标注在模块、方法或结构体上,表示对模块外部公开。3. 文件内部定义模块在文件内部定义模块,使用关键字mod。

    49510

    Rust 模块化:深入了解 Rust 代码组织

    本文是一篇Rust基础文章,如果下面的问题对你不是问题,就不要浪费时间阅读这篇文章了,做些更有意义事情吧。关键字mod、pubcrate、self、super、use都表示什么含义,如何使用?...模块化模块化是对代码一层一层封装。面向对象语言中提供class也算是一种模块化技术,有些语言使用namespace定义命名空间也是一种模块化技术,让我们看看Rust模块化是如何设计。...用crate表示模块我们使用命令cargo new创建项目是一个crate。其它语言中通常叫做package,例如javajar package,jsnpm package。...因此,我们可以把rust依赖包叫做crate package,但Rust社区习惯上都是叫crate。...;}使用use json::*批量引入json模块全部方法或结构,这样我们就可以直接调用encode方法了。使用use关键字可以减少重复写模块名次数,类似其它语言中import引入包名作用。

    32410

    Rust入坑指南:有条不紊

    、范围和隐私路径 Paths:struct、function和module命名方法 下面我们来具体看一下这些特性是如何帮助我们组织代码。...main.rs文件存在表示package包含一个二进制crate,它是二进制crate入口文件,crate名称和package相同。...由于Module可以嵌套定义子Module,最终我们定义出来代码类似一个树形。 那么如何访问Module函数呢?这就要提到Path了。...Rust私有规则适用于所有项(函数、方法、结构体、枚举、模块和常量),它们默认都是私有的。父模块项不能访问子模块私有项,而子模块项可以访问其祖辈(父模块及以上)项。...我们就可以更加方便使用这个路径下一些方法: mod front_of_house { pub mod hosting { pub fn add_to_waitlist() {

    77020

    Rust关键字

    ) continue - 继续进入下一次循环迭代 crate - 链接(link)一个外部 crate 或一个代表宏定义 crate 宏变量 dyn - 动态分发 trait 对象 else - 作为...mut - 表示引用、裸指针或模式绑定可变性 pub - 表示结构体字段、impl 块或模块公有可见性 ref - 通过引用绑定 return - 从函数返回 Self - 定义或实现 trait...类型类型别名 self - 表示方法本身或当前模块 static - 表示全局变量或在整个程序执行期间保持其生命周期 struct - 定义一个结构体 super - 表示当前模块父模块 trait...- 定义一个 trait true - 布尔字面值 true type - 定义一个类型别名或关联类型 union - 定义一个 union 并且是 union 声明唯一用到关键字 use - 引入外部空间符号...static 可以使用原始标识符方式,做到使用这些关键字也能通过编译 原始标识符(Raw identifiers)允许你使用通常不能使用关键字,其带有 r# 前缀

    18450

    【Rust日报】2023-06-20 使用Quickwit、Jaeger和Grafana监控您Rust应用程序

    如果你还没有看过,我们建议阅读一下,因为它提供了一个全面的介绍,介绍了如何处理 Rust 代码日志。 然而,仅仅记录日志可能是不够,特别是在分布式架构。...是网络相关问题,磁盘 I/O 还是过多 CPU 使用? 在本博客文章,我们将展示如何为 Rust 应用程序进行测量,并生成跟踪数据,从 DevOps 视角利用它们。...cargo new web-api 让我们还要确保在 web-api/Cargo.toml 文件拥有所需依赖项。...这是我们如何在处理程序函数和它用于执行任务后续函数上启用跟踪方法。 // lib.rs ......在 Rust 开发人员拥有的所有优秀工具,答案是显而易见 "是的!"。让我们利用 Tokio 和 Rust futures crate 异步流特性,通过并行获取评论。

    70620
    领券