[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]

实用知识

装箱crates

我们今天来讲讲装箱技术crates。

什么是crates?

英语翻译是:

英 [kreɪt] 美 [kreɪt]

  • n. 板条箱;篓
  • vt. 将某物装入大木箱或板条箱中

[ 过去式 crated 过去分词 crated 现在分词 crating 复数 crates 第三人称单数 crates ]


其实,它也就是一种模块化封装技术。

我们还是来看看代码,我们先用命令:cargo new greetings 生成一个新的工程,工程目录如下 :

// # It generates,
greetings
├── Cargo.toml
└── src
└── main.rs

然后我们用vscode打开这个目录,在src目录下,新建一个lib.rs,并写入以下代码:

// 01. greetings/src/lib.rs
pub fn hello() {
println!("Hello, world!");
}

在main.rs文件中写入以下代码:

// 02. greetings/src/main.rs
extern crate greetings; fn main() {
greetings::hello();
}

然后在当前工程目录下,powershell下运行以下命令:

cargo build

cargo run

打印结果为:Hello, world!

我来解释一下相关代码。

extern crate greetings;

这段代码什么意思呢?它代表链接到一个库:greetings

在Rust,

链接一个 crate 到这个新库,必须使用 extern crate 声明。这不仅会链接库,还会导入与库名相同的模块里面的所有项。适用于模块的可见性规则也适用于库。

这里我们要注意一点:

其中库的名字,不能像这样的加横杠线:“like-this”,而是用下划线:"like_this",如下:

extern crate like_this;

现在有另一种情景,当我们的库越来越大,怎么办?

我们可以把这些库统一放在一个crate中。

我们来看看例子。

先用命令创建相关目录:

// # Think we run,
cargo new phrases
cargo new phrases/greetings --lib

这两个命令将产生如下目录:

// # It generates,
phrases
├── Cargo.toml
├── greetings
│ ├── Cargo.toml
│ └── src
│ └── lib.rs
└── src
└── main.rs

在目录phrases下的Cargo.toml文件最后一行,加入以下依赖信息:

greetings = { path = "greetings" }

在目录phrases/greetings/src/lib.rs文件中,更新为如下代码:

// 02. phrases/greetings/src/lib.rs
pub fn hello() {
println!("Hello, world!");
}

在目录phrases/src/main.rs文件中,更新为如下代码:

// 03. phrases/src/main.rs
extern crate greetings; fn main() {
greetings::hello();
}

在工程目录phrases,运行:cargo run,应该会打印出一个正确结果:Hello, world!

我们看到,crate的依赖信息可以写到Cargo.toml文件中,非常方便。

当然,我们可以导入git中的代码库,如下:

/ -- Cargo.toml --
[dependencies] // 01. Get the latest commit on the master branch
rocket = { git = "https://github.com/SergioBenitez/Rocket" } // 02. Get the latest commit of a specific branch
rocket = { git = "https://github.com/SergioBenitez/Rocket", branch = "v0.3" } // 03. Get a specific tag
rocket = { git = "https://github.com/SergioBenitez/Rocket", tag = "v0.3.2" } // 04. Get a specific revision (on master or any branch, according to rev)
rocket = { git = "https://github.com/SergioBenitez/Rocket", rev = "8183f636305cef4adaa9525506c33cbea72d1745" }

当然我们可以从crate.io中导入依赖,比如我们从这个库:https://crates.io/crates/test_crate_hello_world

我们在依赖文件:目录phrases下的Cargo.toml,更新为如下信息:

[*dependencies*]

*#greetings = { path = "greetings" }*

test_crate_hello_world = "0.1.2"

在目录phrases/src/main.rs文件中,更新为如下代码:

extern crate test_crate_hello_world;
fn main() {
println!("{}", test_crate_hello_world::hello());
}

在工程目录phrases,运行:cargo run,应该会打印出一个正确结果:Hello, world!

以上,希望对你有用。

如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust

参考文章:https://learning-rust.github.io/docs/d4.crates.html

[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]的更多相关文章

  1. [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]

    [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...

  2. [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]

    [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的 ...

  3. [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...

  4. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]

    [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了 ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime]

    [易学易懂系列|rustlang语言|零基础|快速入门|(5)] Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = ...

  8. [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]

    [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针]

    [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针] 实用知识 智能指针 我们今天来讲讲Rust中的智能指针. 什么是指针? 在Rust,指针(普通指针),就是保存内存地址的值 ...

  10. [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理]

    [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理] 实用知识 错误处理 我们今天来讲讲Rust中的错误处理. 很多语言都有自己的错误处理方式,比如,java是异常处理机制. ...

随机推荐

  1. shell脚本安装python、pip--这种写法是错误的---每一个命令执行完都要判断是否执行成功,否则无法进行下一步

    shell脚本安装python.pip--不需要选择安装项目--不管用总报错,必须带上判断符号,while没有这种用法,写在这里为了以后少走弯路,所以不要用下面的执行了 首先把pip-.tgz 安装包 ...

  2. Window Position

    IE, Safari, Opera, and Chrome all provide screenLeft and screenTop properties that indicate the wind ...

  3. selenium+java+eclipse web项目自动化测试环境搭建

    一.java的安装与环境配置 1.下载JDK(Java Development Kit),下载地址 www.oracle.com 2.安装jdk(傻瓜式安装) 3.安装完成后,配置环境变量,步骤: ( ...

  4. Bzoj2873 光之大陆

    https://blog.csdn.net/qq_39791208/article/details/79079117 有空来研究

  5. 网页制作入门——HTML(2)编码与字符实体

    在上一期,我们顺口提到了——你写的网页在打开后,可能发现只是一串乱码.那么这是为什么呢? 这就是编码的神奇力量! 八卦的启示——什么是编码? 编码的思想,很早就在中国诞生了,从还不太明朗的结绳记事.算 ...

  6. jmeter性能测试总结

    一.性能测试问题记录: Ⅰ.秒杀的失败率了在96.45%,原因 Query对于 活动的秒杀采用的是0.5秒,刷新缓存的策略在活动中优惠券被秒杀一空 下架前,短暂的时间内仍能够查询到 这个活动架构中采用 ...

  7. ASP.NET Core EFCore 之Code First

    1.在.NET Core项目中使用Nuget引用包 Sql Server 请安装 Microsoft.EntityFrameworkCore.SqlServer 2.添加实体类 [Table(&quo ...

  8. python函数 -- 作用域,异常处理

    1.def语句和参数 python定义函数的关键词为def,格式如下: def 函数名([变元],[变元],....)          #保存在变元中的值,在函数返回后该变元就会被销毁了. 2.返回 ...

  9. “automation服务器不能创建对象”的问题的解决方案大全

    本人工作中的应用系统都是jsp的,大量javascript程序,一旦出“automation服务器不能创建对象”问题,大量报表及查询无法保存,苦思冥想.千尝万试,终于将其搞定,现将相关方案与大家共享. ...

  10. AcWing登山

    这是2006北大举办的ACM的一道题. 题意为:给定景点海拔高度,队员们不去游览相同高度的景点,一开始往上爬,一但往下爬就不能再向上爬,求最多可以游览多少个景点.那么我们可以得到一个结论:以一个最高点 ...