Below you will find pages that utilize the taxonomy term “Mod”
July 10, 2024
在Rust中如何调用一个模块或方法
"\u003cp\u003e在 Rust 中有 \u003ccode\u003e包\u003c/code\u003e、\u003ccode\u003ecrate\u003c/code\u003e、\u003ccode\u003e模块\u003c/code\u003e 概念,本文我们介绍一下它们之间的关系和调用方法。\u003c/p\u003e\n\u003ch1 id=\"包-和-crate\"\u003e包 和 Crate\u003c/h1\u003e\n\u003cp\u003e在Rust中,\u003cem\u003e包\u003c/em\u003e(\u003cem\u003epackage\u003c/em\u003e)是提供一系列功能的一个或者多个 crate。一个包会包含一个 \u003ccode\u003eCargo.toml\u003c/code\u003e 文件,阐述如何去构建这些 crate。\u003c/p\u003e\n\u003cp\u003e我们先看一下通过 \u003ccode\u003ecargo new\u003c/code\u003e 创建一个 \u003ccode\u003emy_project\u003c/code\u003e 包。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e➜ cargo new my_project \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e Creating binary \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eapplication\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003emy_project\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003e package\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enote: see more \u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003eCargo.toml\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003e keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e➜ rust tree my_project \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emy_project\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e├── Cargo.toml\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e└── src\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e └── main.rs\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e directories, \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e files\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e它将创建一个 \u003ccode\u003eCargo.toml\u003c/code\u003e文件,内容:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-toml\" data-lang=\"toml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e[ …\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"
June 25, 2024
Rust中将一个结构体拆分成多个文件
"\u003cp\u003e官方文档将\u003ca href=\"https://kaisery.github.io/trpl-zh-cn/ch07-05-separating-modules-into-different-files.html\"\u003e一个模块拆分成多个文件\u003c/a\u003e时,介绍的是将原来多个模块写在同一个文件中,拆分成了每个模块一个文件。不过还有一种情况没有提到,如果一个模块中的某个 struct 实现代码过多时,仍写在同一个模块文件的话,维护成本就显的比较高了,这时我们可能还需要对这个 struct 的实现按某种粒度拆分成多个文件来实现。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e✗ tree\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e├── main.rs\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e├── model\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e│ ├── article.rs // 文章相关\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e│ └── user.rs // 用户相关\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e└── model.rs\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e这里是按官方教程拆分后的样子\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003earticle.rs\u003c/code\u003e 是文件模块相关实现 -\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003euser.rs\u003c/code\u003e 是与用户相关的实现\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emodel.rs\u003c/code\u003e 公开模块\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003emodel.rs \u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-rust\" data-lang=\"rust\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e// src/model.rs\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003epub\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003emod\u003c/span\u003e article;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003epub\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003emod\u003c/span\u003e user;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003epub\u003c/code\u003e 关键字表示该模块是公开的,可以被其他模块访问。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003emod article\u003c/code\u003e 声明了一个名为 \u003ccode\u003earticle\u003c/code\u003e 的模块,并且 Rust 编译器会在同文件名的目录下( \u003ccode\u003esrc/model/\u003c/code\u003e )找到一个名为 \u003ccode\u003earticle.rs …\u003c/code\u003e\u003c/p\u003e"