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

网站开发与维护招聘天津百度推广公司电话

网站开发与维护招聘,天津百度推广公司电话,wordpress 教程 csdn,公司内部网站设计文章目录 Rust生命周期生命周期注释结构体如何使用字符串静态生命周期 Rust文件与IO接收命令行参数命令行输入文件读取文件写入 Rust生命周期 终于讲到Rust最重要的机制之一了,生命周期机制 我们先复习一下垂悬引用 {let r;{let x 5;r &x;}println!("…

文章目录

    • Rust生命周期
      • 生命周期注释
      • 结构体如何使用字符串
      • 静态生命周期
    • Rust文件与IO
      • 接收命令行参数
      • 命令行输入
      • 文件读取
      • 文件写入

Rust生命周期

终于讲到Rust最重要的机制之一了,生命周期机制

我们先复习一下垂悬引用

{let r;{let x = 5;r = &x;}println!("r: {}", r);
}

这一段代码是编译失败的,原因如下

我们可以看到有两个作用域

rust-lifetime1

a和b,但是其实生命周期也是类似的概念,r的生命周期中a的范围里,x的生命周期中b的范围内

r保存的x的引用,当x销毁之后,r的引用也就失效了,因此也就产生了垂悬引用

这里有一个案例

fn longer(s1: &str, s2: &str) -> &str {if s2.len() > s1.len() {s2} else {s1}
}

接收两个字符串引用,返回两个字符串引用中较长的一个

这段代码是不能通过编译的,因为返回值返回的引用可能会过期,例如这样调用

fn main() {let r;{let s1 = "rust";let s2 = "ecmascript";r = longer(s1, s2);}println!("{} is longer", r);
}

r最后接收的是s2的引用,但是等到我们使用r的时候,s2已经释放了,Rust是会消除一切可能导致危险的情况

生命周期注释

生命周期注释是描述引用生命周期的方法,相当于是给生命周期做一个标记

虽然这样并不能改变引用的生命周期,但是可以在合适的地方声明两个引用的生命周期一致

例如说

&i32        // 常规引用
&'a i32     // 含有生命周期注释的引用
&'a mut i32 // 可变型含有生命周期注释的引用

然后我们就可以用生命周期注释来改造这个函数

fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {if s2.len() > s1.len() {s2} else {s1}
}

调用的时候就可以正常调用了

fn main() {let r;{let s1 = "rust";let s2 = "ecmascript";r = longer(s1, s2);println!("{} is longer", r);}
}

结构体如何使用字符串

之前的样例中,我们使用字符串都是使用的String类型,而不是str类型,主要就是考虑到生命周期的问题

那如果我们需要使用str,就需要设定生命周期

struct Str<'a> {content: &'a str}

这里定义了一个Str结构体,包含一个str类型的字符串,生命周期和结构体生命周期相同

然后使用是这样的

fn main() {let s = Str {content: "string_slice"};println!("s.content = {}", s.content);
}

这里都是没有问题的

那如果我们要给这个结构体赋予一个方法

impl<'a> Str<'a> {fn get_content(&self) -> &str {self.content}
}

这里的返回值类型没有写生命周期注释,加不加都可以的,现在已经可以自动判断生命周期了

静态生命周期

生命周期还有一个注释,'static,所有使用双引号包括的字符串都是`&'static str

表示生命周期从程序的开始一直到程序的结束

Rust文件与IO

接收命令行参数

我们在学C/C++的时候是通过main函数接收参数的,一个字符串数组

但是Rust的main函数是一个午餐的函数,环境的参数是直接通过std::env直接取出来的

例如

fn main() {let args = std::env::args();println!("{:?}", args);
}

这个打印出来的第一个参数是当前运行的目录,而后续的参数可能是环境变量或者是命令行参数

命令行输入

我们可以直接使用std::io这个模块来调用输入

use std::io::stdin;fn main() {
let mut str_buf = String::new();stdin().read_line(&mut str_buf).expect("Failed to read line.");println!("Your input line is \n{}", str_buf);
}

read_line可以直接读取一行信息到缓冲区,返回值是Result枚举,用于传递读取中的错误,可以用expect或者unwrap方法来处理错误

Rust中还没有提供直接从命令行读取数字或者格式化数据的方法,主要还是读取一行字符串,然后再用字符串识别函数处理数据

文件读取

这个就是用std::fs模块即可

例如

use std::fs;fn main() {let text = fs::read_to_string("~\text.txt").unwrap();println!("{}", text);
}

如果要读取二进制文件,则直接使用模块中的read函数即可

如果是需要读取大型文件,则可能需要流式处理的方式

例如说

use std::io::prelude::*;
use std::fs;fn main() {let mut buffer = [0u8; 5];let mut file = fs::File::open("~\text.txt").unwrap();file.read(&mut buffer).unwrap();println!("{:?}", buffer);file.read(&mut buffer).unwrap();println!("{:?}", buffer);
}

File是描述文件的一个类,打开文件之后,就可以获取一个文件对象

然后可以通过对象的read方法读取字节到缓冲区,读取的字节数等于缓冲区的长度

文件写入

文件写入也分为一次写入和流式写入,流写入有打开方式,可以设置create和append

一次写入很简单

use std::fs;fn main() {fs::write("~\text.txt", "FROM RUST PROGRAM").unwrap();
}

流写入create需要调用对应的方法

use std::io::prelude::*;
use std::fs::File;fn main() {let mut file = File::create("~\text.txt").unwrap();file.write(b"FROM RUST PROGRAM").unwrap();
}

写入的话就需要设置为mut

append就需要OpenOptions来设置

use std::io::prelude::*;
use std::fs::OpenOptions;fn main() -> std::io::Result<()> {let mut file = OpenOptions::new().append(true).open("~\text.txt")?;file.write(b" APPEND WORD")?;Ok(())
}
http://www.dtcms.com/wzjs/528174.html

相关文章:

  • 网站建设捌金手指花总二九郑州做网站的大公司
  • 网站搜索引擎优化情况怎么写宁波seo智能优化
  • 广州佛山app网站商城制作广州seo学徒
  • 靖江做网站的单位搜索引擎优化百度百科
  • 河北省衡水市景县规划网站地推拉新接单网
  • 网站开发报价模版2023最新15件重大新闻
  • 建最便宜的网站要多少钱适合30岁短期培训班
  • wordpress 开通微信制服郑州seo顾问
  • 网站建设优化推广站长统计免费下载
  • 海外网络推广服务seo系统培训班
  • 可以直接进入的网站正能量大豆网引流推广网站
  • 网站建设公司销售技巧seo门户网价格是多少钱
  • 做自动发货网站慈溪seo
  • wordpress制作小说网站模板宁波seo
  • 邯郸手机网站建设软文营销经典案例
  • 开发微信小程序公司东莞seo快速排名
  • 互联网保险销售行为可回溯管理办法seo营销是什么意思
  • 武汉网站建设培训深圳全网推广排名
  • 朋友用我的vps做网站免费的seo
  • 重庆潼南网站建设哪家便宜关键词搜索量怎么查
  • 网店运营实训报告sem优化托管
  • 自建站成本百度小说风云榜2022
  • 餐厅网站建设策划方案qq推广平台
  • 西安网站开发哪家好线上推广app
  • 定制网站制作技术营销的四种方式
  • 想访问国外网站 dns网络优化工程师前景如何
  • 界面设计做的好的网站游戏如何在网上推广
  • 泉州网站建设推广腾讯企点官网
  • 网站建设与维护教案可以访问违规网站的浏览器
  • 我的世界怎么做赞助网站建立一个国外的网站