Rust最常用函数(备忘查询)
配置vscode调试
配置参考。下载CodeLLDB,选择rust自动生成launch。json文件{configurations:〔添加一下行,使vechashmap等类型显示正常sourceLanguages:〔rust〕〕}
将编译文件与标准库的位置进行映射{lldb。launch。sourceMap:{你自己的映射hash和映射路径rustc4b91a6ea7258a947e59c6522cd5898e7c0a6a88f:Usersfeiwu。rustuptoolchainsstableaarch64appledarwinlibrustlibsrcrust}}HelloWorld。rsfnmain(){println!(Hello,World!);}编译运行rustcHelloWorld。rs。HelloWorldHello,World!原始类型
bool
布尔值(truefalse)
char
字符
f32,f64
32位、64位浮点数
i64,i32,i16,i8
有符号16。。。整数
u64,u32,u16,u8
无符号16位,。。。整数
isize
指针大小的有符号整数
usize
指针大小的无符号整数
查看:Rust类型格式化单个占位符println!({},1);多个占位符println!({}{},1,3);位置参数println!({0}是{1}{2},{0}也是{3}编程语言,Rust,cool,language,safe);命名参数println!({country}是一个团结的国家,countryChina);占位符特征:b表示二进制,:0x表示十六进制,:o表示八进制println!(让我们打印76是二进制的{:b},十六进制等价物是{:0x}八进制等价物是{:o},76,76,76);调试特征println!(使用调试特征{:?}在此处打印我们想要的任何内容,(76,A,90));1。58中的新格式字符串letxworld;println!(Hello{x}!);打印风格打印输出print!(HelloWorld);打印后追加新行println!(追加新行);打印为错误eprint!(这是一个错误);打印为新行错误eprintln!(这是新行的错误);变量初始化和声明变量letsomevariableThisisavariable;使变量可变letmutmutablevariableMutable;分配多个变量let(name,age)(ElementalX,20);(全局)常量constSCREAMINGSNAKECASE:i649;注释行注释。。。。。。。。。。。。。块注释外部文档注释!内部文档评论
另见:注释(doc。rustlang。org)函数fntest(){println!(这是一个函数!);}fnmain(){test();}
查看:Functions声明宏macrorules!foo{(l:tt){bar!(l);}}macrorules!bar{(3){}}foo!(3);元变量
item
程序项
block
块表达式
stmt
语句
(注意此选择器不匹配句尾的分号)
pat
模式
expr
表达式
ty
类型
ident
标识符或关键字
path
类型表达式形式的路径
tt
token树
(单个token或宏匹配定界符()、〔〕或{}中的标记)
meta
属性,属性中的内容
lifetime
生存期token
vis
可能为空的可见性限定符
literal
匹配?字面量表达式结构体
结构体是一个使用关键字struct定义的标称型(nominal)结构体类型structPoint{x:i32,y:i32}letpPoint{x:10,y:11};letpx:i32p。x;元祖结构体structColor(i32,i32,i32);letblackColor(0,0,0);单元结构体
不关心该类型的内容,只关心它的行为。structSolution;implSolution{。。。}语句与表达式
在rust中,语句无需返回值,而表达式总要返回值语句letahello。tostring();letbaworld;println!({},b);表达式fnmain(){letx{letahello。tostring();aworld};println!({},x);helloworld}Rust类型类型别名typePoint(u8,u8);letp:Point(41,68);整数letmuta:u328;letb877u64;letc8999i64;letd90;浮点数letmutsixtybitfloat:f6489。90;letthirtytwobitfloat:f327。90;letjustafloat69。69;布尔值lettrueval:booltrue;letfalseval:boolfalse;letjustabooltrue;letistrue85;false字符letfirstletterofalphabeta;letexplicitchar:charF;letimplicitchar8;letemojiu{1f600};字符串字面量letcommunitynameAXIAL;letnoofmembers:strten;println!(社区的名称是{communityname},它有{noofmembers}个成员);
查看:字符串数组
这里介绍的是固定长度的数组。rust中常用的是集合类型vec表示的动态数组929798999894012345letarray:〔i64;6〕〔92,97,98,99,98,94〕;letmutarray:〔i32;3〕〔2,6,10〕;array〔1〕4;array〔2〕6;
使用mut关键字使其可变切片letmutarray:〔i64;4〕〔1,2,3,4〕;下限包括在内,上限不包括在内letmutslices:〔i64〕array〔0。。3〕println!(切片的元素是:{slices:?});元组lettuple(1,A,Cool,78,true);Rust字符串字符串字面量letcs:str备忘清单;为开发者分享备忘单println!(为开发者分享{cs});字符串对象创建一个空字符串对象letmystringString::new;转换为字符串对象letSstringastring。tostring()创建一个初始化的字符串对象letlangString::from(Rust);println!(Firstlanguageis{lang});。capacity()letrandString::from(RandomString);rand。capacity()13
以字节为单位计算字符串的容量。contains()letnameString::from(ElementalX);name。contains(Element)true
检查子字符串是否包含在原始字符串中添加单个字符letmuthalftextString::from(Hal);halftext。push(f);Half添加整个字符串letmuthiString::from(Heythere。。。);hi。pushstr(Howareyoudoing??);Heythere。。。Howareyoudoing??println!({hi});原生字符串letstr1rhello;println!({},str1);hello
原生字符串,无需增加转义字符()转义字节和字节串letstr2ba;println!({},str2);97letstr3bhello;println!({:?},str3);〔92,104,101,108,108,111〕letstr4brhello;println!({:?},str4);〔92,104,101,108,108,111〕Rust动态数组创建动态数组letv:Veci32Vec::new();使用宏letv1vec!〔1,2,3〕;读取元素letvvec!〔1,2,3,4,5〕;letelementv〔100〕;panic,越界letelement2v。get(100);println!({:?},element2);None遍历数组只读取数组中的元素letvvec!〔1,2,3〕;foriinv{println!({},i);}遍历的同时修改数组中的元素letmutvvec!〔1,2,3〕;foriinmutv{i10}多维数组j0j1j2j3j4j5i0123456i1654321letarrvec!〔vec!〔1,2,3,4,5,6〕,vec!〔6,5,4,3,2,1〕〕;常用方法
len()
返回vec的长度
isempty()
vec是否为空
push(value)
在vec尾部插入元素
pop()
删除并返回vec尾部的元素或者返回None
insert(index,element)
在指定索引处插入元素
remove(index)
删除指定索引处的元素并返回被删除的元素,索引越界将panic报错退出
clear()
清空vec
append(vec)
将另一个vec中的所有元素追加移入vec中,移动的vec变为空
truncate(len)
将vec截断到指定长度,多余的元素被删除
retain(f)
根据给定的函数,保留满足条件的元素
drain(range)
删除vec中指定范围的元素,同时返回一个迭代该范围所有元素的迭代器
splitoff(index)
切分vec,索引左边的元素保留在原vec中(含索引),索引右边的元素(不含索引)在返回的vec中枚举在结构体中使用枚举enumIpAddrKind{V4,V6,}structIpAddr{kind:IpAddrKind,address:String,}fnmain(){letipIpAddr{kind:IpAddrKind::V4,address:String::from(127。0。0。1)};}枚举的变体enumIpAddrKind{V4(u8,u8,u8,u8),V6(String),}fnmain(){lethomeIpAddrKind::V4(127,0,0,1);letloopbackIpAddrKind::V6(String::from(::1));}enumMessage{Quit,Move{x:i32,y:i32},Write(String),ChangeColor(i32,i32,i32),}fnmain(){letqMessage::Quit;letmMessage::Move{x:10,y:20};letwMessage::Write(String::from(hello));letcMessage::ChangeColor(10,20,30);}模式匹配结构体〔derive(Debug)〕enumGrade{A,B,C,}enumSubject{Math(Grade),English(Grade),}fnsubjectgrade(sub:Subject){matchsub{Subject::Math(grade)println!(TheMathis{:?},grade),Subject::English(grade)println!(TheMathis{:?},grade),}}fnmain(){subjectgrade(Subject::Math(Grade::A));}Rust运算符比较运算符
ef
e等于f
e!f
e不等于f
ef
e小于f
ef
e大于f
ef
e小于或等于f
ef
e大于或等于flet(e,f)(1,100);letgreaterfe;trueletlessfe;falseletgreaterequalfe;trueletlessequalef;trueletequaltoef;falseletnotequaltoe!f;true算术运算符
ab
a被添加到b
ab
从a中减去b
ab
a除以b
ab
通过与b相除得到a的余数
ab
a与b相乘let(a,b)(4,5);letsum:i32ab;9letsubtractions:i32ab;1letmultiplication:i32ab;20letpision:i32ab;0letmodulus:i32ab;4位运算符
gh
二进制与
gh
二进制或
gh
二进制异或
gh
二进制补码
gh
二进制左移
gh
二进制右移let(g,h)(0x1,0x2);letbitwiseandgh;0letbitwiseorgh;3letbitwisexorgh;3letrightshiftg2;0letleftshifth4;32逻辑运算符
cd
两者都是真的(AND)
c
!c
c为假(NOT)let(c,d)(true,false);letandcd;falseletorcd;trueletnot!c;false复合赋值运算符letmutk9;letmutlk;
kl
添加一个值并赋值,然后k9
kl
Substrate一个值并赋值,然后k18
kl
除以一个值并赋值,然后k9
kl
乘一个值并赋值,然后k81
kl
按位或并赋值,则k89Rust流程控制If表达式letfoo12;letbar13;iffoobar{println!(foo等于bar);}elseiffoobar{println!(foo小于bar);}elseiffoo!bar{println!(foo不等于bar);}else{println!(Nothing);}For循环letmutvec〔1,2,3〕;forvinmutvec{v1;println!(v的值为:{v});}
foritemincollection
foritemincollection。intoiter()
转移所有权
foritemincollection
foritemincollection。iter()
不可变借用
foriteminmutcollection
foritemincollection。itermut()
可变借用While循环letmutcheck0;whilecheck11{println!(check是:{check});check1;println!(递增后:{check});ifcheck10{break;停止while}}Loop循环loop{println!(你好,世界永远!);}
无限循环表示Continue继续声明for(v,c)in(0。。101)。enumerate(){println!({c}数字循环);ifv9{println!(我们继续?);continue;}println!{v的值为:{v}};}Break中断语句
break可以单独使用,也可以带一个返回值letmuti1;letresloop{println!(i是{i});ifi100{breaki100;}i2;}println!({res});28Rust模式匹配match
match模式匹配,使用ab表示匹配a或b,使用,表示匹配剩余所有选项fnmain(){letgradeGrade::A;matchgrade{Grade::Aprintln!(Good),Grade::Bprintln!(Notbad),Grade::CGrade::Dprintln!(Comeon),println!(emmm),}}enumGrade{A,B,C,D,E,F,}matches!宏
它可以将一个表达式跟模式进行匹配,然后返回匹配的结果true或falseassert!(matches!(x,A。。Za。。z));assert!(matches!(Some(101),Some(x)ifx100));iflet匹配
match表达式需要匹配所有的枚举才能结束,但通常我们只需要匹配我们需要的值letx3;matchSome(x){Some(3)println!(Iguessthatxis3),()}
使用ifletletx3;ifletSome(3)Some(x){println!(Iguessthatxis3);}whileletletmutstackvec!〔〕;stack。push(1);stack。push(2);stack。push(3);whileletSome(top)stack。pop(){println!({},top);}其它模式匹配for循环迭代器for(i,v)incollection。iter()。enumerate(){}letlet(x,,y)(1,2,3);println!({x},{y});函数中的模式匹配fnadd((x,y):(i32,i32))i32{xy}fnmain(){letsumadd(1,2);println!({sum});}忽略参数使用。。忽略剩余参数structPoint{x:i32,y:i32,z:i32,}letoriginPoint{x:0,y:0,z:0};matchorigin{Point{x,。。}println!(xis{},x),}使用忽略部分参数lethello(h,e,l,l,o);matchhello{(h,,,l,o){println!(char:{},{},{},h,l,o)},}匹配命名变量
以下代码,只要给定的x是Some类型,但Some中的值不是1,都会匹配到yletxSome(10);matchx{Some(1)println!(x1),Some(y)println!(y{:?},y),println!(None),}y10绑定
运算符允许为一个字段绑定另外一个变量。letgradeA;matchgrade{goodA。。Cprintln!(yourgradeis{},good),println!(Comeon),}〔derive(Debug)〕structPoint{x:i32,y:i32,}fnmain(){letpPoint{x:px,y:py}Point{x:10,y:23};println!(x:{},y:{},px,py);println!({:?},p);}
如果使用,需要使用(),进行多个模式的绑定match1{num(12){println!({},num);}{}}使用匹配守卫letxSome(2);matchx{Some(1)println!(x1),Some(y)ify2println!(y{:?},y),println!(Nomatch),}y2Rust函数函数命名
rust的函数使用蛇形命名法(snakecase)fnprintmessage(){println!(Hello,QuickReference!);}参数值
rust需要为函数的参数标明确定的类型fnanotherfn(a:u8,b:str){println!(我是u8:{},a);println!(我是str:{},b);}fnmain(){anotherfn(10,hello)}返回值
如果不指定返回值,rust默认返回()类型在bin中的入口函数默认返回()fnmain(){}
使用指定返回值,如果表达式在最后一行,无需使用returnfnadd(a:i32,b:i32)i32{ifab100{returnab;}ab}永不返回!fndeadend()!{panic!(panic!!!!!);}惯用转换strStringString::from(str);str。tostring();str。toowned();str〔u8〕str。asbytes();
或者你也可以使用bprintln!({:?},bstr);strVecstr。asbytes()。tovec();str。asbytes()。toowned();StringstrletsString::from(str);letrs。asstr();String〔u8〕letsString::from(str);letvs。asbytes();StringVecletsString::from(str);letvs。intobytes();〔u8〕strletbstr。asbytes();letstrstd::str::fromutf8(b)。unwrap();〔u8〕Stringletbstr。asbytes();letstrString::fromutf8(b。tovec())。unwrap();〔u8〕Vecletbstr。asbytes();letstrb。tovec();letbstr。asbytes();letstrb。toowned();Vecstrletbstr。asbytes()。tovec();letsstd::str::fromutf8(b)。unwrap();Vec〔u8〕letbstr。asbytes()。tovec();letsb。asslice();VecStringletbstr。asbytes()。tovec();letsString::fromutf8(b)。unwrap();杂项类型断言typecastingletaint90;intint到floatletmuttypecast(aintasf64);letorginal:charI;char到int73lettypecasted:i64orginalasi64;
要在Rust中执行类型转换,必须使用as关键字借用letmutfoo4;letmutborrowedfoofoo;println!({borrowedfoo});letmutbar3;letmutmutableborrowedbarmutbar;println!({mutableborrowedbar});
这里借用的值使用运算符从值一中借用值解引用letmutborrow10;letderefmutborrow;println!({},deref);
操作符用于解引用作用域{范围仅限于此大括号letanumber1;}println!({anumber});
这将产生错误,因为变量anumber的生命周期在大括号处结束
网站https:doc。rustlang。org
二龙湖往事黄金劫今日上线四平警事原班人马再聚首爆笑搞黄金二龙湖浩哥IP最新力作二龙湖往事黄金劫今日起在爱奇艺腾讯视频首播上线,该片继续由张浩导演并领衔主演,九孔孙睿祺张贵生王双宝巴多白红标何铁红等主演,张涛董政吴尔渥大漠友情出演。二龙湖
刘亦菲的人间清醒发言,她的人生哲学治愈了多少焦虑的普通人前段时间去有风的地方热播,除了掀起了一片旅游潮和对裸辞的讨论。主角刘亦菲的身材也一度被推上了热搜,而这一次不再是我们熟知的对她的褒奖,更多是对她的嘲讽和谴责,而这一切只是因为她的一
抗美援朝的终极骗局,美国傻傻被中国欺骗41年,得知后脸都绿了二战结束之后,以美国和苏联为首的世界局势正式定型,由于双方都已研制出核武器,所以在巨大杀伤性的威慑下,彼此均不敢先行出手,只能维持着数十年的冷战,可尽管冷战是一场没有硝烟的对抗,但
红色电影故事(74)新中国第一部儿童抗战影片鸡毛信编文孙海帆抗日战争期间,广大抗日根据地建立了抗日儿童团青年抗日救国联合会中华民族抗日先锋队等青年组织,受共产党的委托,直接领导抗日儿童团及其他儿童组织的工作。儿童团的主要任务是学习
徐梦迪著名女演员闫学晶儿媳妇,嫁星二代老公林傲霏孕妇照惊艳头条创作挑战赛娱乐娱评大赏影视杂谈请关注年龄不是人生的枷锁,每天给你带来一位名人感人的故事。小编白杨徐梦迪,中国内地女演员,出道以来先后拍摄过衰爸神童等4部数字电影,出演过音乐剧白
(经济)第五届中国重庆涪陵榨菜产业国际博览会开幕当日,为期3天的第五届中国重庆涪陵榨菜产业国际博览会暨2023世界榨菜产业创新大会在重庆涪陵区开幕,来自国内外的数十家榨菜腌菜企业到场参展。2月20日,在第五届中国重庆涪陵榨菜产业
春季虚火上浮?快来熬制一煲味甘鲜美滋阴清热的靓汤今日推荐菜干青榄响螺汤材料菜干60克,青榄56颗,响螺头3个,猪扇骨1块,蜜枣3枚,生姜15克,食盐适量。做法1。所有食材洗净,菜干提前泡发,焯水螺头用清水泡软后,切做小块或宽条猪
张大大的直播间,当代精神病人的失乐园张大大突然,就看惯张大大了。张大大现在真的太火了,这个表情包也终于可以用上了。虽然天天上热搜,每次都不重样儿,但怎么就讨厌不起来,甚至有点上头呢?张大大直播哭了的话题再次登上了热搜
春不养,夏易病,请收好这份春季养生饮食攻略春为四季之首,万象更新之始,黄帝内经中说春三月,此谓发陈,天地俱生,万物以荣。春季阳气上升,大地回暖,万象更新,生机盎然,一年之计在于春,春季也是一年中养生的黄金季节,春不养,夏易
郁证肛病论赵医生说健康201810112205素问五脏别论载魄门亦为五脏使。魄门即肛门,从中医整体观来看,肛门局部的生理功能与病理变化同样受到五脏的影响,需要依赖心神的主宰肺气的肃降肝气的条
一咳嗽就漏尿,多是脾虚不固有的人感冒后期咳嗽到无力,还出现漏尿的现象。漏尿这个问题现在我们普遍认为是神经方面问题或者是盆底肌和尿道括约肌的直接间接功能损伤造成的。中医看问题都是整体对待的,漏尿绝对不是单单一