当前位置: 首页 > news >正文

嵊州门户网站深圳制作网站建设推广

嵊州门户网站,深圳制作网站建设推广,中国招聘网,广西高端网站建设公司枚举enum 1.枚举的定义和使用如下图所示#xff1a; 定义时还可以给枚举的成员指定数据类型#xff0c;例如#xff1a;enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下#xff0c;使用::进行分隔。 2.一个特殊的枚举Option#xff0…枚举enum 1.枚举的定义和使用如下图所示 定义时还可以给枚举的成员指定数据类型例如enum IpAddr{V4(u8, u8, u8, u8),V6(String),}。枚举的变体都位于标识符的命名空间下使用::进行分隔。 2.一个特殊的枚举Option在预导入模块prelude中定义它描述了某个值可能存在某种类型或者不存在的情况Rust中没有Null。 3.控制流运算符match允许一个值与一系列模式进行匹配并执行匹配的模式对应的代码模式可以是字面值、变量名、通配符等等。match表达式类似于一个函数每个分支都会有一个返回值并且整个match表达式的返回值类型必须一致。如下图 Match匹配必须穷举所有的可能否则会报错可以用通配符_这里可以用任何一个合法标识符来捕获剩下的匹配值替代其余没有列出的值_需要写在最后面也可以使用任何合法的变量名捕获其他所有情况后续可以在分支内部使用该变量进行进一步的处理。 4.if let的用法处理只关心一种匹配而忽略其他匹配的情况下图中v 恰好等于Some(3) 时条件会成立第一个分支就会被执行。if let还可以用于简化模式匹配用于匹配并解构Option,、Result等枚举类型的某个特定变体并在匹配成功时执行相应代码。 Rust代码组织 1.Package是一个Rust项目的最外层单位它由一个或多个crate组成至少有一个。它通常包含一个Cargo.toml文件用于描述包的元数据、依赖项以及构建信息。每个package至少包含一个项目这个项目可以是一个可执行项目由main.rs文件定义或者一个库项目由lib.rs文件定义。包和项目的关系是一个package可以包含多个可执行项目可放在src/bin目录下但最多只能包含一个库项目。使用cargo new project创建一个新工程时生成的就是一个Rust包package。想创建一个库包而不是可执行包可以使用--lib选项。使用cargo new my_library --lib命令时Cargo会在src/目录下创建一个lib.rs文件而不是main.rs文件。这个lib.rs文件是库项目的入口文件定义了库的公共API。 2.Crate是Rust代码的编译单元所有的Rust代码都是在crate的上下文中进行编译的。一个crate可以是一个库也可以是一个可执行文件。每个crate都有一个根模块根模块对应着crate的入口文件——对于库crate入口文件是lib.rs对于二进制crate默认入口文件是main.rs这个miain.rs编译生成的可执行文件名称与package名相同。Crate定义了一个独立的命名空间并且可以导入其他crate来使用它们的功能。由于main.rs是二进制crate的入口点它的内容通常不会被库crate直接引用。因此lib.rs中不能直接使用main.rs中定义的函数或结构体。相反库crate应该定义功能并将这些功能公开给其他模块或crate使用而main.rs可以引用这些功能。 3.Module是Rust中用于组织代码的机制它允许将代码划分为多个部分每个部分可以在其自己的命名空间中定义。模块帮助管理代码的可读性和可维护性一个crate的根模块可以包含其他模块而这些模块又可以嵌套定义子模块。Rust中的模块可以通过文件系统组织例如一个模块可以定义在与它同名的文件中或者作为父模块文件中的嵌套模块定义模块之间的关系通常通过use关键字和路径来引用。 4.Path是Rust中用于引用项例如函数、结构体、枚举、模块等的方式它定义了如何从一个命名空间访问另一个命名空间的内容。路径可以是绝对路径从crate的根模块开始可以使用crate名或者字面值“crate”也可以是相对路径从当前模块开始使用self、super或当前模块的标识符super用来访问父级模块路径中的内容类似于文件系统中的..路径的标识符之间用::隔开。路径使得你能够在模块层次结构中导航访问不同模块和它们的内容。Rust的路径系统允许你清晰、简洁地访问代码片段即使它们位于不同的模块或crate中。 5.私有边界模块不仅可以组织代码还可以定义私有边界Rust中所有的条目函数、方法、struct、enum、模块、常量等默认都是私有的父模块无法访问子模块中的私有条目子模块可以使用所有祖先模块中的条目。可以使用pub来将这些条目声明为公有的如下图没有声明为公有的私有条目无法被访问 6.use关键字可以使用use关键字将路径可以使用相对路径或者绝对路径导作用域内仍然遵循私有性规则通常习惯将函数的父级模块引入作用域以此来区分该函数是不是在其他模块引入的而习惯将除函数外的其他元素如struct、enum等的整个完整路径引入作用域如果有同名struct可以引用到父级以此来区分。可以用as关键字来为引入的路径指定本地的别名如use std::fmt::Result as Re。 使用use将路径导入到作用域内后该名称在此作用域中是私有的可以在前面加上pub则被导入的条目就可以被其他外部代码引入到他们的作用域中。如pub use std::fmt::Result。 7.外部包的使用需要现在Cargo.toml文件中添加依赖然后用use将需要的特定条目引入到作用域内。标准库std也被当作外部包不用在Cargo.toml文件中添加std但需要用use将需要使用的std中的条目引入到当前作用域。当在Rust项目中使用cargo build命令编译程序时CargoRust的包管理器和构建系统会将所有依赖的外部包下载并解压到target/debug/deps或target/release/deps文件夹中具体位置取决于你是进行调试编译debug还是发布编译release。对于同一个包中的不同条目可以使用嵌套路径的方式导入路径相同的部分::{路径差异的部分}路径差异部分用逗号分隔如use std::io::{cmp::Ordering,io};如果两个use路径之一是另一个的子路径可使用self如use std::io::{self,Write};。使用通配符*可以把路径中所有的公共条目都引入到作用域如use std::collections::*。 8.模块定义时如果模块名后边是;而不是代码块Rust会从与模块同名的文件中加载内容模块树的结构不会变化如下图 常见集合 1.Vector由标准库提供VecT可以存储多个值但只能存储相同类型的值值在内存中连续存放。Vector初始化一般有两种方式用new函数会初始化一个空的vector还可以用宏定义vec!初始化如下图所示 向vector添加元素可以用push方法例如v.push(1)添加的元素会被放在vector的末尾。当vector离开其作用域时会像其他struct一样被清理掉他里面所有的元素也会被清理掉。可以使用索引或者get方法来访问vector中的元素get方法返回的是OptionT枚举类型所以当用get方法获取元素传入的索引越界时返回的是None而直接通过索引访问在越界时会引起panic。 所有权和借用规则在vector中同样适用例如不能在同一作用域中同时拥有可变和不可变引用。可以用for循环来遍历vector中元素的值如下图println! 宏可以直接接受引用所以不需要解引用i就可以打印出其指向的值 vector只能存储同一类型的数据可以和enum配合使用来存储不同类型的值将enum作为vector的元素如下图 2.字符串字符串本质是Byte的集合主要包括字符串字面值str和String由标准库提供采用UTF-8编码两种类型Rust标准库还提供了其他字符串类型OsString、OsStr、CString、CStr等。创建一个新的字符串可以使用new函数如let mut s String::new();to_string()方法可用于实现了Displaying trait的类型包括字符串字面值或者String::from()函数如下图 更新字符串的方式有push_str()方法可以把一个字符串切片附加到String如s.push_str(“abc”);表示将abc附加到s后面push()方法可以把单个字符附加到String如s.push(‘a’);可以用连接字符串但只能把str类型添加到String即左侧操作数必须是String类型左侧String的所有权会被消耗右侧操作数必须是strformat!可用来连接多个字符串这种方式不会修改参数的所有权。 String不支持索引的访问方式可以将String看作是字节、标量或者字形对于标量值可以用chars()方法来遍历对于字节可以用bytes()方法来遍历。 可以使用[ ]和一个范围来创建字符串的切片但如果切片跨越了字符边界就会报错字符是以UTF-8编码的有些字符占2-4个字节切片的开始或结束位置不能在这样的2-4字节之间。 3.HashMapK,V以键值对的形式来存储数据一个键对应一个值Hash函数用来决定如何在内存中存放K和V。可以用new函数创建一个新的空HashMap如let mut map HashMap::new();用insert方法向其中添加键值对如map.insert(key1, value1);。在同一个HashMap中所有的K必须是同一个类型所有的V必须是同一个类型。还可以基于collect方法在元素类型为Tuple要求Tuple有两个值一个作为K另一个作为V的Vector上创建新的HahsMap如下图 在HashMap中对于实现了Copy trait的类型如i32值会被复制到HashMap中对于拥有所有权的值如String所有权会转移给HashMap如果将值的引用插入到HashMap中值的所有权不会转移但在HashMap有效期间被引用的值必须保持有效。可以用get方法传入参数K访问HashMap中的V返回值为OptionT枚举类型。可以用for遍历HashMap中的键值对如下图 更新HashMap有以下几种情况1.K已经存在可以选择替换现有的V、保留现有的V忽略新的V、合并现有的V和新的V2.K不存在添加一对KV。如果向HashMap插入一对KV然后再插入同样的K不同的V则原来的V会被替换。可以先用entry方法检查指定的K是都存在该方法返回enum Entry代表值是否存在然后使用Entry的or_insert()方法若K存在返回对应值的可变引用若K不存在该方法将参数作为K的新值插入HashMap而后返回这个值的可变引用如下图所示 错误处理 1.Rust中将错误分为可恢复错误例如文件未找到等可再次尝试和不可恢复错误bug例如索引访问越界可恢复错误可返回ResultT,E枚举类型不可恢复错误和使用panic!宏来报错这个宏的默认处理方式为展开unwind、清理调用栈即从产生错误的地方开始逆向遍历调用栈逐层清理每一层函数调用所分配的资源。这个过程确保了所有已经获取的资源例如内存、文件句柄、锁等能够被正确地释放避免资源泄漏。在展开过程中Rust 会自动调用每个作用域中的析构函数也称为Drop实现释放资源或执行其他清理操作。然后退出程序。这样的默认操作比较费时可以将其重新设置为panic!时直接中止调用栈而不进行任何清理操作内存清理交由操作系统去完成具体设置可修改Cargon.toml文件如下图 panic!可能发生在我们自己写的程序中也可能发生在我们程序所依赖的代码中可以通过设置RUST_BACKTRACE环境变量回溯错误具体信息如在运行时设置cargo run RUST_BACKTRACE1但必须保证编译时没有加--realease选项。 2.Result枚举类型原始定义如下 和Option一样Result也是由prelude带入作用域Result枚举类型可以作为函数返回值或match匹配结果如下图 3.unwrap()方法可用于从Option或Result类型中提取值。如果调用unwrap()时包含的值是Some或Ok它将返回内部的值如果是None或Err它将触发恐慌panic程序会终止执行。expect()方法也用于从Option或Result类型中提取值但与unwrap() 不同的是它允许自定义panic时的错误消息。这样当unwrap() 触发panic时可以得到更明确的错误信息帮助调试。 4.错误处理的一种更加简洁和快捷的方式是使用?运算符?运算符可以用于处理返回Result或Option类型的函数或表达式如果Result是OkOk中的值就是表达式的结果然后继续执行程序如果Result是ErrErr就是整个函数的返回值相当于使用了return。如下图所示从上到下代码逐渐简洁 Trait std::convert::From上的from函数可以用于错误类型之间的转换被?所应用的错误会隐式地被from函数处理当?调用from函数时它所接收的错误类型会被转化为当前函数返回类型所定义的错误类型只要每个错误类型实现了转换为所返回的错误类型的from函数。
文章转载自:
http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn
http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn
http://www.morning.btpzn.cn.gov.cn.btpzn.cn
http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn
http://www.morning.grtwn.cn.gov.cn.grtwn.cn
http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn
http://www.morning.jfxdy.cn.gov.cn.jfxdy.cn
http://www.morning.sxtdh.com.gov.cn.sxtdh.com
http://www.morning.mysmz.cn.gov.cn.mysmz.cn
http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn
http://www.morning.beeice.com.gov.cn.beeice.com
http://www.morning.3ox8hs.cn.gov.cn.3ox8hs.cn
http://www.morning.hsxkq.cn.gov.cn.hsxkq.cn
http://www.morning.dshkp.cn.gov.cn.dshkp.cn
http://www.morning.gwjqq.cn.gov.cn.gwjqq.cn
http://www.morning.snxbf.cn.gov.cn.snxbf.cn
http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn
http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn
http://www.morning.neletea.com.gov.cn.neletea.com
http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn
http://www.morning.ymwny.cn.gov.cn.ymwny.cn
http://www.morning.mpgfk.cn.gov.cn.mpgfk.cn
http://www.morning.blzrj.cn.gov.cn.blzrj.cn
http://www.morning.yhljc.cn.gov.cn.yhljc.cn
http://www.morning.dhxnr.cn.gov.cn.dhxnr.cn
http://www.morning.myhpj.cn.gov.cn.myhpj.cn
http://www.morning.wnhml.cn.gov.cn.wnhml.cn
http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn
http://www.morning.fmrwl.cn.gov.cn.fmrwl.cn
http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.morning.qfkxj.cn.gov.cn.qfkxj.cn
http://www.morning.fkwgk.cn.gov.cn.fkwgk.cn
http://www.morning.wdxr.cn.gov.cn.wdxr.cn
http://www.morning.cylbs.cn.gov.cn.cylbs.cn
http://www.morning.jcfg.cn.gov.cn.jcfg.cn
http://www.morning.a3e2r.com.gov.cn.a3e2r.com
http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn
http://www.morning.npqps.cn.gov.cn.npqps.cn
http://www.morning.hlppp.cn.gov.cn.hlppp.cn
http://www.morning.bfysg.cn.gov.cn.bfysg.cn
http://www.morning.trqhd.cn.gov.cn.trqhd.cn
http://www.morning.mbmtn.cn.gov.cn.mbmtn.cn
http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn
http://www.morning.jtnph.cn.gov.cn.jtnph.cn
http://www.morning.twwts.com.gov.cn.twwts.com
http://www.morning.ryspp.cn.gov.cn.ryspp.cn
http://www.morning.bdfph.cn.gov.cn.bdfph.cn
http://www.morning.rwqk.cn.gov.cn.rwqk.cn
http://www.morning.sflnx.cn.gov.cn.sflnx.cn
http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn
http://www.morning.lnckq.cn.gov.cn.lnckq.cn
http://www.morning.skrh.cn.gov.cn.skrh.cn
http://www.morning.lsfzq.cn.gov.cn.lsfzq.cn
http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn
http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn
http://www.morning.wglhz.cn.gov.cn.wglhz.cn
http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn
http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn
http://www.morning.tytly.cn.gov.cn.tytly.cn
http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn
http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn
http://www.morning.rsnn.cn.gov.cn.rsnn.cn
http://www.morning.rksnk.cn.gov.cn.rksnk.cn
http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn
http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn
http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn
http://www.morning.bwnd.cn.gov.cn.bwnd.cn
http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn
http://www.morning.mtrz.cn.gov.cn.mtrz.cn
http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn
http://www.morning.thlzt.cn.gov.cn.thlzt.cn
http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn
http://www.morning.qcbhb.cn.gov.cn.qcbhb.cn
http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn
http://www.morning.kltsn.cn.gov.cn.kltsn.cn
http://www.morning.msbct.cn.gov.cn.msbct.cn
http://www.morning.jgykx.cn.gov.cn.jgykx.cn
http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn
http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn
http://www.tj-hxxt.cn/news/249408.html

相关文章:

  • 基于目的地的o2o旅游电子商务网站开发设计毕业设计网站文章更新怎么做
  • 良精网站管理系统装修网站效果图
  • 深圳安鸿源建设网站网站开发公司 郑州
  • 关于建设网站安全性合同网站建好后如何上线
  • dedecms新网站 上传到万网的空间三亚哪里做网站
  • 做网站的你选题的缘由是什么全球设计师
  • 公司网站 仿站什么意思中文搭建式软件开发工具
  • 网站建设需要用到什么建设网站我们重中之重-用户体验
  • 四川省城乡住房与建设厅网站首页郑州企业的网站建设
  • 做家教什么网站制作网站单页
  • 河南两学一做网站中小企业微网站建设
  • 工程模板多少钱一张郑州网站优化怎样做
  • 做网站可以赚钱吗知乎爱山东app二维码
  • 德州加盟网站建设网站设计费用多少
  • 鲤城网站建设推广服务公司百度平台营销宝典
  • 建设网上商城网站广州做网站信科分公司
  • 成功网站运营案例网页界面分析及设计布局
  • 内部网站建设软件下载金融股票类app网站开发
  • 上海做ui网站最好的公司辽宁省辽宁省建设厅网站
  • 北京网站公司制作多少钱可以做网站
  • 做网站的软件去哪里买坑梓网站建设市场
  • php 怎么做 网站html5手机网站开发环境
  • 百度云网站建设视频wordpress全站启用ssl张戈
  • 信息化建设杂志社官方网站网站建设技术人员
  • 外贸网站建设排名网页制作与网站建设宝典pdf
  • 网站排名优化提升快速网站开发研究背景
  • h5响应式网站模板广东网站建设工作
  • 网站多语言切换wordpress页面样板
  • 东莞大朗网站建设黑客怎么攻击网站
  • 成都网站建设蜀美网络wordpress 多重排序