文章目录

  • 0.env
  • 1. 参数简述
    • 1.self
    • 2.crate
    • 3.super
  • 2.多源码文件
    • 1.工程结构
    • 2.文件源码及注释
  • 3.use , as
    • 1.use
    • 2.as
    • 3.pub + use
  • demo:
    • 1.mod with struct
    • 2.mod with enum
    • 3.use + as + pub

0.env

ubuntu1804

1. 参数简述

1.self

当前位置,如:

fn get(&self)->u32{self.id //指向当前对象的id字段
}

2.crate

绝对路径,如:

mod class{mod func{fn show(){} //通过绝对路径被调用的函数}
}
mod run{mod func{crate::class::func::show(); //通过绝对路径调用函数}
}

3.super

相对路径,如:

mod class{mod func{fn show(){} //通过相对路径被调用的函数}mod func_2{fn run(){super::func::show();// 调用../class/func/show()}}
}

2.多源码文件

1.工程结构:两个源码文件
2.文件源码及注释

1.工程结构

src|----main.rsL----func.rs

2.文件源码及注释

/// 1.func.rs
pub fn show_1(i:u32){  // 定义一个pub函数println!("show_1 : {}" ,i );
}/// 2.main.rs
mod func;  // 引入整个mod
fn main() {func::show_1(1000);  //通过包的路径调用
}
///

3.use , as

使用如下代码用于举例说明

mod class_a{// for usepub fn show_a(){println!("class_a::show_a()");}// for use + aspub mod show_info{pub fn show_a(){println!("class_a::show_info::show_a()");}}// for pub + usepub mod show{pub mod sh{pub fn ow(){println!("class_a::show::sh::ow()");}}}pub use show::sh::ow;
}

1.use

使用use命令来简化书写,避免每次调用都使用完整路径,也可以区分不同mod中的同名函数等,类似C++命名空间等。

use crate::class_a::show_a; //简化路径
fn main{show_a();//直接调用,不必指明具体路径
}

2.as

别名,简化。例如区分同名不同包的函数。

/// 为相同代码起个别名 避免简化使用时出现问题
use crate::class_a::show_a;
use crate::class_a::show_info::show_a as show_b;show_a();show_b();

3.pub + use

在mod内使用。
将某个mod的多级后的函数提到mod::func处使用,避免单独使用use时指明多级目录。

mod class_a{// for pub + usepub mod show{pub mod sh{pub fn ow(){println!("class_a::show::sh::ow()");}}}pub use show::sh::ow;  // 层层扒皮到最顶层,类似define一个名字代表另一个多级结构下的函数
}fn main(){class_a::ow(); // 直接从mod后调用
}

demo:

1.mod with struct

mod中结构体默认为private,需要公开结构体路径,同时结构体字段默认也为private。
如要访问结构体字段,需要将该字段设置为public。

mod student{pub struct Stu{id:u32,               //id默认为private , 不可以被外部函数访问pub name:String,  // name 字段是public的,可以被外部函数访问}impl Stu{pub fn new_stu(name:&str)->Stu{   // 类似构造函数,name public是可以通过外部传参来修改的。id为private ,无法被直接修改Stu{id:999,name:String::from(name),}}pub fn set_id(&mut self,id:u32){  // Private 字段只能被同一包内访问,同时若要修改,需要传入mut参数,否则字u32、str等是不可被修改的self.id = id ;}pub fn get_id(&self )->u32{  // 私有字段的访问方式self.id}}
}pub fn change_name(){let mut s1 = student::Stu::new_stu("name_ori");
//  println!("id = {}",s1.id);//error  , private id  // 私有字段无法被直接访问println!("name = {}",s1.name); //公有字段可以被直接访问s1.set_id(1000);   //私有字段的修改,需要定义mut参数,只能修改mut参数,不能修改str等字段let id = s1.get_id();println!("id = {}",id);
}fn main() {change_name();
}

2.mod with enum

enum只要public,则内部都为pub,可以被直接访问,如下:

─
mod class{pub enum Sta{Ret{sta:u32,},Nothing,}
}
fn enum_demo(){let ret = class::Sta::Ret{sta:1}; // Ret及其字段,可以访问。match ret {class::Sta::Ret{sta} =>{println!("get sta : {}",sta);}_ => {}}
}

3.use + as + pub

mod class_a{// for usepub fn show_a(){println!("class_a::show_a()");}// for use + aspub mod show_info{pub fn show_a(){println!("class_a::show_info::show_a()");}}// for pub + usepub mod show{pub mod sh{pub fn ow(){println!("class_a::show::sh::ow()");}}}pub use show::sh::ow;
}use crate::class_a::show_a;
use crate::class_a::show_info::show_a as show_b;fn main() {func::show_1(1000);show_a();show_b();class_a::ow();}

【rust】part-7 self,crate,super、use,as相关推荐

  1. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  2. 【rust】wsl2和云主机: ubutnu22.04 尝试编译 rustdesk-server

    上一篇,不成功编译[rust]wsl2 ubutnu22.04 尝试编译 rustdesk-server-demo 试试一直维护的 rustdesk-server 云主机安装 cargo curl - ...

  3. 【rust】| 06——语言特性 | 所有权

    系列文章目录 [rust]| 00--开发环境搭建 [rust]| 01--编译并运行第一个rust程序 [rust]| 02--语法基础 | 变量(不可变?)和常量 [rust]| 03--语法基础 ...

  4. 【方向盘】JavaSE/EE基础面试题、基础知识记录---大杂烩

    非常地难学,但是却不可思议地好用.你还要学吗? 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpa ...

  5. 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO

    [Redis]14.Redis高级数据类型Bitmaps.HyperLogLog.GEO Bitmaps:用比特位进行快速的状态统计 Bitmaps基本操作 Bitmaps不是一个新的数据类型,而是s ...

  6. 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作

    [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 文章目录 [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 一.数据库的分类 1.关系型数据库 2.非关系型数据库 3.MyS ...

  7. arcgis 删除图形重复折点_【干货】ArcGIS中画环状图斑、挑子区及消除图斑重复区域...

    原标题:[干货]ArcGIS中画环状图斑.挑子区及消除图斑重复区域 ArcGIS的Editor菜单下,有许多功能我们不经常用,但是在如果仔细的研究下就会发现,其实许多功能是相当实用的. 1.绘制环状图 ...

  8. 【解决方案】SpringCloud项目优雅发版、部署

    [解决方案]SpringCloud项目优雅发版.部署 参考文章: (1)[解决方案]SpringCloud项目优雅发版.部署 (2)https://www.cnblogs.com/fonxian/p/ ...

  9. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计

    [转] C#学习笔记14--Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空 ...

  10. 【iOS】使用SQLite3的时候Swift3.、XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not

    [iOS]使用SQLite3的时候Swift3..XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not ...

最新文章

  1. linux怎么停止ssh服务,Linux 故障排除:关闭 SSH 会话后如何保存工作状态?
  2. ListControl 换行行高与字体
  3. 承接数字油画图稿/线条图定制(出图)业务
  4. Java中Integer.parseInt()用法
  5. 设计模式----原型模式(C++实现)
  6. hdu1536 S-Nim(博弈)
  7. [转载]计算机端口详解
  8. 个人博客,个人博客模版,用HTML+CSS做一个漂亮简单的个人网页,个人博客网站html源码
  9. 仿真软件Multisim 10下载地址与破解补丁
  10. php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
  11. PIE工程师是做什么的
  12. 上海交大计算机系王楠,交通学院本科生学生组织干部名单
  13. 通过GDI+修改jpg文件EXIF属性
  14. python怎么爬取电影海报_Python3 爬取时光网电影海报和电影数据
  15. Python基础刷题,期末不挂科~~~(已完结)
  16. 主打产品“火力不足”致使发行人持续盈利能力下降,这公司创业板IPO被终止
  17. python 日历节假日显示颜色_python判断2018/2019年的某天是否是节假日
  18. Win10安装了Office右键没有新建Word,excel,PPT等选项解决方法
  19. 私人 — 在 Apple 商务管理或 Apple 校园教务管理上作为自定 App 提供
  20. 用均线做期货可以吗(期货常用的均线是哪些)

热门文章

  1. mysql grant什么意思_MySQL grant 语法的详细解析
  2. 泰尔指数r语言_EG指数:从繁琐到简单
  3. 一次编写命令时遇到的问题,Ambiguous method call.both
  4. windows系统引导配置命令
  5. com.google.inject.ProvisionException: Guice provision errors问题解决
  6. java poodle,Java http客户端和POODLE
  7. 目标检测---IoU计算公式
  8. 项目管理知识体系指南(十)项目风险管理
  9. HTML函数多个条件并列,countifs多个并列条件(countifs同一列2个条件
  10. 【MATLAB】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象