深圳seo网站优化公司,wordpress页面权限插件,把公司网站 公开下载 做教程 侵权吗,商城网站有什么好处rust
最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下
rust关于包#xff0c;Crate
关于包#xff0c;Crate这块先看看官方书籍怎么说的
crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…rust
最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下
rust关于包Crate
关于包Crate这块先看看官方书籍怎么说的
crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件第一章我们这么做过编译器还是会将那个文件认作一个 crate。crate 可以包含模块模块可以定义在其他文件然后和 crate 一起编译我们会在接下来的章节中遇到。
crate 有两种形式二进制项和库。二进制项 可以被编译为可执行程序比如一个命令行程序或者一个服务器。它们必须有一个 main 函数来定义当程序被执行的时候所需要做的事情。目前我们所创建的 crate 都是二进制项。
库 并没有 main 函数它们也不会编译为可执行程序它们提供一些诸如函数之类的东西使其他项目也能使用这些东西。比如 第二章 的 rand crate 就提供了生成随机数的东西。大多数时间 Rustaceans 说的 crate 指的都是库这与其他编程语言中 library 概念一致。
crate root 是一个源文件Rust 编译器以它为起始点并构成你的 crate 的根模块我们将在 “定义模块来控制作用域与私有性” 一节深入解读。
包package是提供一系列功能的一个或者多个 crate。一个包会包含一个 Cargo.toml 文件阐述如何去构建这些 crate。Cargo 就是一个包含构建你代码的二进制项的包。Cargo 也包含这些二进制项所依赖的库。其他项目也能用 Cargo 库来实现与 Cargo 命令行程序一样的逻辑。包中可以包含至多一个库 crate(library crate)。包中可以包含任意多个二进制 crate(binary crate)但是必须至少包含一个 crate无论是库的还是二进制的
这里我个人理解包类似于java当中maven当中的模块,crate root 是一个源文件Rust 编译器以它为起始点并构成你的 crate 的根模块。就是说各个mod串联的起点比如main.rs当中定义。或者lib.rs库create
mod
先看看官方教程
这里我们提供一个简单的参考用来解释模块、路径、use关键词和pub关键词如何在编译器中工作以及大部分开发者如何组织他们的代码。我们将在本章节中举例说明每条规则不过这是一个解释模块工作方式的良好参考。
从 crate 根节点开始: 当编译一个 crate, 编译器首先在 crate 根文件通常对于一个库 crate 而言是src/lib.rs对于一个二进制 crate 而言是src/main.rs中寻找需要被编译的代码。
声明模块: 在 crate 根文件中你可以声明一个新模块比如你用mod garden声明了一个叫做garden的模块。编译器会在下列路径中寻找模块代码
内联在大括号中当mod garden后方不是一个分号而是一个大括号 在文件 src/garden.rs在文件 src/garden/mod.rs
声明子模块: 在除了 crate 根节点以外的其他文件中你可以定义子模块。比如你可能在src/garden.rs中定义了mod vegetables;。编译器会在以父模块命名的目录中寻找子模块代码内联在大括号中当mod vegetables后方不是一个分号而是一个大括号
在文件 src/garden/vegetables.rs
在文件 src/garden/vegetables/mod.rs
模块中的代码路径: 一旦一个模块是你 crate 的一部分你可以在隐私规则允许的前提下从同一个 crate 内的任意地方通过代码路径引用该模块的代码。举例而言一个 garden vegetables 模块下的Asparagus类型可以在crate::garden::vegetables::Asparagus被找到。
私有 vs 公用: 一个模块里的代码默认对其父模块私有。为了使一个模块公用应当在声明时使用pub mod替代mod。为了使一个公用模块内部的成员公用应当在声明前使用pub。
use 关键字: 在一个作用域内use关键字创建了一个成员的快捷方式用来减少长路径的重复。在任何可以引用crate::garden::vegetables::Asparagus的作用域你可以通过 use crate::garden::vegetables::Asparagus;创建一个快捷方式然后你就可以在作用域中只写Asparagus来使用该类型。
这里我个人理解就像是java当中的package当然也有很大区别。通过这些能组织项目中的目录各个package引用
举个例子用mvc层架构controller包举例
想创建controller目录首先再main.rs或者lib.rs当中声明mod这里用main.rs举例
pub mod controller;fn main() {println!(hello world!);
}然后就可以创建controller目录了并创建对应的mod.js 下面再controller目录下创建别的rs文件可以这么做比如创建user模块的。 在controller/mod.rs当中声明user mod
pub mod user;然后就可以在controller目录下创建user.rs mod了 最终下来简单结构如图 后续可以按照此方法创建单package下的代码结构了。 文章算是记录遇到的问题。如有不对的地方欢迎指正