zoukankan      html  css  js  c++  java
  • [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]

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

  • 相关阅读:
    [轉]mysql命令大全
    [轉]常用MYSQL管理工具收集windows
    [轉]Oracle 数据类型及存储方式
    [轉]mysql函数集
    [轉]Mysqldump备份还原和mysqldump导入导出语句大全详解
    JavaScript定义类的几种方式
    [轉]NoSQL数据库探讨之一 - 为什么要用非关系数据库?
    FLV文件介绍
    XAMPP维基百科,自由的百科全书
    [轉]dom table
  • 原文地址:https://www.cnblogs.com/gyc567/p/12005129.html
Copyright © 2011-2022 走看看