[易学易懂系列|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" }

我们在依赖文件:目录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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

一个简单的消息提示jquery插件

最近在工作中写了一个jquery插件,效果如下: 就是一个简单的提示消息的一个东西,支持最大化.最小化.关闭.自定义速度.自定义点击事件,数据有ajax请求和本地数据两种形式.还有不完善的地方,只做了 ...

[bzoj1122][POI2008]账本BBB

1122: [POI2008]账本BBB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 402  Solved: 202[Submit][Status ...

任意类型转换为IntPtr

之前,将数组.结构体等转换为IntPtr使用的是Marshal.Copy().Marshal.StructureToPtr(),但是有个问题自定义的结构体数组没法这样转化,一般网上给出的解决方法就是通 ...

MVC系统学习3—ModelBinder

在ASP.NET MVC中,每个请求都被映射到一个Action方法,我们可以在action的方法中定义相应类型的参数,View中通过post.get方式提交的request参数,只要名称一致就会对应到 ...

【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序

本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看. 点击下载:https://codeload.github.com/hammerc/hammerc-study-St ...

(转) sphinx 高亮显示搜索词

http://hi.baidu.com/tewuapple/item/7a7bc34adbda24a8df2a9fe5  (转)

IP工具类——IpAddress.java

根据IP地址获取详细的地域信息,也可通过 http://whois.pconline.com.cn/ 获取地址信息. 源码如下:(点击下载  IpAddress.java) import java.i ...

读jQuery源码 jQuery.data

var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; function internalData( elem, n ...

PHP连接mysql数据库进行增删改查--删除

删除: 1.首页 在foreach里面加入

删除 在上面&lt ...

nginx的基础应用

nginx的基础应用 一.简介 今天我们将介绍一些nginx的简单应用,启动.停止nginx,重载nginx的配置,nginx配置文件的格式,如何配置nginx服务静态资源,如何配置nginx作为反向 ...

rust放置木箱转向_[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]...相关推荐

  1. [易学易懂系列|golang语言|零基础|快速入门|(一)]

    golang编程语言,是google推出的一门语言. 主要应用在系统编程和高性能服务器编程,有广大的市场前景,目前整个生态也越来越强大,未来可能在企业应用和人工智能等领域占有越来越重要的地位. 本文章 ...

  2. [易学易懂系列|golang语言|零基础|快速入门|(二)]

    现在我们来写代码,首先我们要新建一个项目. 新建项目: 点击:File>>New>>Project...如下图: 在New Project窗口,Location:输入:&quo ...

  3. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  4. 【Python零基础快速入门系列 | 07】浪漫的数据容器:成双成对之字典

    这是机器未来的第11篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/125038890 <Python零基础快速入门系 ...

  5. Pr零基础快速入门Premiere视频剪辑系列(1):初识Premiere

    很高兴跟大家见面了,由于工作非常忙的原因很久没有更新了,私底下也收到很多粉丝朋友的消息催我更新,所以再忙也要对得起粉丝朋友,于是打算出一套Pr的快速入门教程,希望能帮到大家,如果对您有帮助,欢迎给哥我 ...

  6. rust放置木箱转向_rust笔记五 - cyper的个人空间 - OSCHINA - 中文开源技术交流社区...

    http://doc.rust-lang.org/guide.html#crates-and-modules 15 crates和modules 一个木箱是一个独立的编译单元,可以包含一个module ...

  7. rust放置木箱转向_rust船厂保险丝放在哪里 | 手游网游页游攻略大全

    发布时间:2016-05-07 腐蚀是一款FPS僵尸类生存游戏,这款游戏中玩家可以体验到非常自由的游戏方式,玩家需要寻找生存的资源,同时也需要及时预防僵尸和其他不怀还以的玩家的入侵,下面是新手全面攻略 ...

  8. 易语言零基础新手入门系列教程 第一课

    机器人小鑫易语言源码(作业用): 机器人小鑫源码 - 第一课.zip 视频教程文字版: 新手学习易语言的几点建议 1.由浅入深.由易到难.循序渐进,切勿急功近利,想一步登天! 这是学习的一般规律,学习 ...

  9. kali怎么新建文本_甘特图怎么画?零基础快速绘制甘特图的软件

    甘特图还有一个别称就是横道图.顾名思义,图形就是用横条表示的.甘特图的意义在于用横条来表示时间的进度,不论是在项目管理过程中,还是公司未来计划安排中都可以选择应用甘特图来清晰明了的表达. 甘特图怎么画 ...

最新文章

  1. 逐!帧!揭!秘!终于能看清波士顿动力机器人的细节了
  2. 【 Notes 】Positioning system classification
  3. django jsonresponse_利用 Django 动态展示 Pyecharts 图表数据的几种方法
  4. 【Flutter】Hero 动画 ( Hero 动画使用流程 | 创建 Hero 动画核心组件 | 创建源页面 | 创建目的页面 | 页面跳转 )
  5. c++经典书籍--深度探索C++对象模型
  6. python读取word文档
  7. yml配置文件中有特殊字符解决方案
  8. 软件需求和结构_软件体系结构
  9. java中的html标签位置,Java 过滤所有html标签,复制文件到指定位置
  10. 多通道卷积的参数数量计算
  11. 备份文件时,添加时间戳
  12. Linux 文本处理工具
  13. hdu 5178 pairs (线性探查问题)
  14. (附源码)spring boot智能车APP毕业设计250623
  15. Android源码 app预制带so和assets文件的aar包(sdk)
  16. Ubuntu网络连接激活失败
  17. 关于MAC地址修改和扩展以太网
  18. 关于Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp异常问题的解读
  19. 超好看的3D烟花代码(html+css+js)带音乐
  20. Unity 动作包的使用方法

热门文章

  1. 2021年茶艺师(高级)考试内容及茶艺师(高级)找解析
  2. 十大最具幸福感城市出炉 广州、深圳均榜上无名
  3. HTML 统一资源定位器
  4. SpringBoot 区分环境dev test prod
  5. HA Of Rancher
  6. 微信小程序开发之——音乐小程序-项目说明
  7. 1067 例题5-7 求圆周率pi的近似值
  8. Java后端--52--Mybatis1:Mybatis入门
  9. MATLAB建立ar模型,matlab关于ar模型
  10. 2022年低压电工上岗证题库及模拟考试