zoukankan      html  css  js  c++  java
  • [易学易懂系列|rustlang语言|零基础|快速入门|(18)|use关键词]

    [易学易懂系列|rustlang语言|零基础|快速入门|(18)|use关键词]

    实用知识

    use关键词

    我们今天来讲讲use关键词。

    1.简单来说,use是给其他方法或资源定义一个别名,然后调用者,就可以直接用这个别名来调用,从而简化代码。

    看下例子吧,我们先来看看没有用use的代码:

    // -- Initial code without the `use` keyword --
    mod phrases { 
      pub mod greetings { 
        pub fn hello() { 
          println!("Hello, world!");
        }
      }
    }
    
    fn main() { 
      phrases::greetings::hello(); // Using full path
    }
    

    如果没有用use,我们的代码是很繁琐的。

    我们现在用use,来看看有什么效果:

    // -- Usage of the `use` keyword --
    // 01. Create an alias for module
    use phrases::greetings;
    fn main() { 
      greetings::hello();
    }
    

    这里,我们看到是对模块phrases和子模块greetings,创建一个别名:phrases::greetings。

    当然,我们也可以对模块中的元素进行重新创建别名,看代码:

    // 02. Create an alias for module elements
    use phrases::greetings::hello;
    fn main() { 
      hello();
    }
    

    当然,我们也可以把这个别名重新命名,看代码:

    // 03. Customize names with the `as` keyword
    use phrases::greetings::hello as greet;
    fn main() { 
      greet();
    }
    

    2.导入元素到作用域

    我们之前的测试例子,其实就用到这个功能。

    请看代码:

    fn hello() -> String {
      "Hello, world!".to_string()
    }
    
    #[cfg(test)]
    mod tests {
      use super::hello; // Import the `hello()` function into the scope
    
      #[test]
      fn test_hello() {
        assert_eq!("Hello, world!", hello()); // If not using the above `use` statement, we can run same via `super::hello()`
      }
    }
    

    其中,super代表当前模块从父模块导入相关资源。那我们可以推断self就代表当前模块了。

    是的,正确。

    现在我们再来看看标准库的use用法 :

    // -- 01. Importing elements --
    use std::fs::File;
    
    fn main() {
        File::create("empty.txt").expect("Can not create the file!");
    }
    
    
    // -- 02. Importing module and elements --
    std::fs::{self, File} // `use std::fs; use std::fs::File;`
    
    fn main() {
        fs::create_dir("some_dir").expect("Can not create the directry!");
        File::create("some_dir/empty.txt").expect("Can not create the file!");
    }
    
    
    // -- 03. Importing multiple elements --
    use std::fs::File;
    use std::io::{BufReader, BufRead}; // `use std::io::BufReader; use std::io::BufRead;`
    
    fn main() {
        let file = File::open("src/hello.txt").expect("file not found");
        let buf_reader = BufReader::new(file);
    
        for line in buf_reader.lines() {
            println!("{}", line.unwrap());
        }
    }
    

    3.重新暴露

    这里的重新暴露,是指通过一个固定模块,把子模块的相关资源暴露给外部。

    看代码:

    // ↳ main.rs
    mod phrases;
    
    fn main() {
        phrases::hello(); // Not directly map
    }
    
    // ↳ phrases/mod.rs
    pub mod greetings;
    
    pub use self::greetings::hello; // Re-export `greetings::hello` to phrases
    
    // ↳ phrases/greetings.rs
    pub fn hello() {
      println!("Hello, world!");
    }
    

    以上,希望对你有用。

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

    参考文章:https://learning-rust.github.io/docs/d6.use.html

  • 相关阅读:
    Vue 数组响应
    Vue 事件监听
    Vue 分支循环
    Vue 计算属性与方法
    Vue 属性与样式
    Vue mustache语法&常用指令
    vue 基本介绍
    linux(centos7) 安装nginx
    python 创建虚拟环境(一个独立的环境)
    Python标准库学习--->1、内置函数(1-10个)
  • 原文地址:https://www.cnblogs.com/gyc567/p/12009907.html
Copyright © 2011-2022 走看看