【rust】part-7 self,crate,super、use,as
文章目录
- 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相关推荐
- 【Java】泛型中 extends 和 super 的区别?
<? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...
- 【rust】wsl2和云主机: ubutnu22.04 尝试编译 rustdesk-server
上一篇,不成功编译[rust]wsl2 ubutnu22.04 尝试编译 rustdesk-server-demo 试试一直维护的 rustdesk-server 云主机安装 cargo curl - ...
- 【rust】| 06——语言特性 | 所有权
系列文章目录 [rust]| 00--开发环境搭建 [rust]| 01--编译并运行第一个rust程序 [rust]| 02--语法基础 | 变量(不可变?)和常量 [rust]| 03--语法基础 ...
- 【方向盘】JavaSE/EE基础面试题、基础知识记录---大杂烩
非常地难学,但是却不可思议地好用.你还要学吗? 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpa ...
- 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO
[Redis]14.Redis高级数据类型Bitmaps.HyperLogLog.GEO Bitmaps:用比特位进行快速的状态统计 Bitmaps基本操作 Bitmaps不是一个新的数据类型,而是s ...
- 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作
[数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 文章目录 [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 一.数据库的分类 1.关系型数据库 2.非关系型数据库 3.MyS ...
- arcgis 删除图形重复折点_【干货】ArcGIS中画环状图斑、挑子区及消除图斑重复区域...
原标题:[干货]ArcGIS中画环状图斑.挑子区及消除图斑重复区域 ArcGIS的Editor菜单下,有许多功能我们不经常用,但是在如果仔细的研究下就会发现,其实许多功能是相当实用的. 1.绘制环状图 ...
- 【解决方案】SpringCloud项目优雅发版、部署
[解决方案]SpringCloud项目优雅发版.部署 参考文章: (1)[解决方案]SpringCloud项目优雅发版.部署 (2)https://www.cnblogs.com/fonxian/p/ ...
- 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计
[转] C#学习笔记14--Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计 .NET Framework 命名空 ...
- 【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 ...
最新文章
- linux怎么停止ssh服务,Linux 故障排除:关闭 SSH 会话后如何保存工作状态?
- ListControl 换行行高与字体
- 承接数字油画图稿/线条图定制(出图)业务
- Java中Integer.parseInt()用法
- 设计模式----原型模式(C++实现)
- hdu1536 S-Nim(博弈)
- [转载]计算机端口详解
- 个人博客,个人博客模版,用HTML+CSS做一个漂亮简单的个人网页,个人博客网站html源码
- 仿真软件Multisim 10下载地址与破解补丁
- php保存必应壁纸,README.md · 墨涩/自动下载每日必应壁纸到指定文件夹php源码 - Gitee.com...
- PIE工程师是做什么的
- 上海交大计算机系王楠,交通学院本科生学生组织干部名单
- 通过GDI+修改jpg文件EXIF属性
- python怎么爬取电影海报_Python3 爬取时光网电影海报和电影数据
- Python基础刷题,期末不挂科~~~(已完结)
- 主打产品“火力不足”致使发行人持续盈利能力下降,这公司创业板IPO被终止
- python 日历节假日显示颜色_python判断2018/2019年的某天是否是节假日
- Win10安装了Office右键没有新建Word,excel,PPT等选项解决方法
- 私人 — 在 Apple 商务管理或 Apple 校园教务管理上作为自定 App 提供
- 用均线做期货可以吗(期货常用的均线是哪些)
热门文章
- mysql grant什么意思_MySQL grant 语法的详细解析
- 泰尔指数r语言_EG指数:从繁琐到简单
- 一次编写命令时遇到的问题,Ambiguous method call.both
- windows系统引导配置命令
- com.google.inject.ProvisionException: Guice provision errors问题解决
- java poodle,Java http客户端和POODLE
- 目标检测---IoU计算公式
- 项目管理知识体系指南(十)项目风险管理
- HTML函数多个条件并列,countifs多个并列条件(countifs同一列2个条件
- 【MATLAB】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象