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

小生意是做网站还是公众号销售找客户最好的app

小生意是做网站还是公众号,销售找客户最好的app,大学生可以做的网站项目,好用的网页制作软件标题 一、概念二、规则三、示例3.1 变量作用域3.2 所有权的移交(深拷贝与浅拷贝)3.3 函数与所有权3.4 返回值与作用域3.5 引用的使用 四、切片(&str) 一、概念 所有权是Rust的核心特性。所有程序在运行时都必须管理它们使用计算机内存的方式。Rust的…

标题

  • 一、概念
  • 二、规则
  • 三、示例
    • 3.1 变量作用域
    • 3.2 所有权的移交(深拷贝与浅拷贝)
    • 3.3 函数与所有权
    • 3.4 返回值与作用域
    • 3.5 引用的使用
  • 四、切片(&str)

一、概念

  • 所有权是Rust的核心特性。
  • 所有程序在运行时都必须管理它们使用计算机内存的方式。Rust的内存是通过一个所有权系统来管理的,其中包含一组编译器在编译时检查的规则。
  • 在Rust中,一个值是在栈还是堆上对语言的行为和为什么要做某些决定是有更大的影响的。
  • Rust通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。在运行时,所有权系统的任何功能都不会减慢程序。

二、规则

  • Rust 中的每一个值都有一个被称为其所有者(owner)的变量;
  • 值在任一时刻有且只有一个所有者
  • 当所有者(变量)离开作用域,这个值将被丢弃
  • 函数参数的传递也会造成所有权的转移;
  • 使用引用可以只使用变量而不转移所有权;
  • 一个引用的作用域从声明的地方开始一直持续到最后一次使用为止;

三、示例

3.1 变量作用域

  • 下面的变量x超出了{}的作用域范围,打印时报错cannot find value x in this scope
  • hello变量自动在堆内存中申请了空间,并且初始化为hello,等出了作用域(倒数第二个“}”号)后自动调用drop函数释放内存。
fn main() {{let x =  3;} println!("x = {}", x);  //cannot find value `x` in this scope{let hello =  String::from("hello");println!("hello  = {}", hello );}
}

3.2 所有权的移交(深拷贝与浅拷贝)

  • 在堆上申请的内存,会在连续赋值的时候进行内存所有权的移交。
  • 可以使用clone函数进行堆内存的深拷贝
fn main() {let x = 5;let y = x;  //栈内存,没有任何影响let h = String::from("HelloWorld!");let l = h;   //已经进行了所有权的移交,h已不存在//let l = h.clone();  //可以使用clon()函数重新申请空间//println!("h = {}",h);  //error: value borrowed here after move(clone除外)println!("l = {}",l);
}

3.3 函数与所有权

将值传递给函数在语义上与给变量赋值相似。所有权转移的规则也相同

fn main() {let s = String::from("Hello");take_ownership(s);  //这里s发生了转移 let x = 5;makes_copy(x);     //栈上的变量x不受所有权影响println!("{} {}", x, s);   //s的所有权在take_ownership里,因此这里无法打印
}fn take_ownership(src: String){println!("{}", src);
}fn makes_copy(src: i32){println!("{}", src)
}

3.4 返回值与作用域

返回值可以把内存空间的所有权返回

fn main() {let s1 = gives_ownership(); //来源于gives_ownership中的some_stringlet s2 = String::from("hello");  let s3 = takes_and_gives_back(s2);  //通过该函数所有权从s2转移到了s3println!("{}{}{}", s1, s2, s3);   //s2编译报错}fn gives_ownership() -> String {let src = String::from("hello"); src   //返回src的所有权
}fn takes_and_gives_back(a_string: String) -> String{a_string
}

3.5 引用的使用

在参数中使用引用就可以只传递变量而不传递所有权

fn main() {let mut s = String::from("Hello");alter_string_value(&mut s);  //只传递s的值而不转移所有权println!("{}", s);   //s依然有效,输出“Hello,world”
}fn alter_string_value(src: &mut String){  //可变引用src.push_str(",world");
}fn print_string_value(src: &String){src.push_str(",world");  //不可变引用,不能修改
}

在同一时间,只能有一个对某一特定数据的可变引用,尝试创建两个可变引用的代码将会失败。

fn main() {let mut s = String::from("hello");let r1 = &mut s;let r2 = &mut s;println!("{}, {}", r1, r2);
}

报错信息如下
在这里插入图片描述
这个报错说这段代码是无效的,我们不能在同一个作用域内多次将 s 作为可变变量。第一个可变的引用在 r1 中,并且必须持续到在 println! 中使用它,但是在那个可变引用的创建和它的使用之间,我们又尝试在 r2 中创建另一个可变引用,它引用了与 r1 相同的数据。

这样做是为了避免数据竞争,数据竞争由三个行为造成:

  • 两个或更多指针同时访问同一数据。
  • 至少有一个指针被用来写入数据。
  • 没有同步数据访问的机制。

禁止同时使用可变与不可变引用

fn main() {let mut s = String::from("hello");let r1 = &s; // 没问题let r2 = &s; // 没问题let r3 = &mut s; // 大问题println!("{}, {}, and {}", r1, r2, r3);
}

改成下面这样就行了,依然是作用域的问题。

fn main() {let mut s = String::from("hello");let r1 = &s; // 没问题let r2 = &s; // 没问题println!("{} {}", r1, r2);let r3 = &mut s; // 没问题println!("{}", r3);
}

四、切片(&str)

  • 切片(slice)允许引用集合中一段连续的元素序列,而不用引用整个集合;
  • 字符串字面量就是切片,因此它是不可变的;
  • 可以采用字符串切片&str作为参数类型,因此这样就可以同时接收String和&str类型的参数了;
  • 定义函数时使用字符串切片代替字符串引用会使我们的API更加通用,且不会损失任何功能;

切片示例

fn main() {let s = String::from("hello world!");let hello = &s[0..5];  //hello,取0到4字符, 也可以写成&s[..5]let world = &s[5..];   //world,取6到最后let whole = &s[..];  //整个字符串// s.clear();println!("*{}*",hello);  //*hello*println!("*{}*",world);  //* world!*println!("{}", whole);   //hello world!
}

函数示例

fn main() {let s = String::from("hello world!");let wordIndex = first_world(&s[..]); //使用完整的切片println!("wordIndex = {}", wordIndex);let my_string_literal = "hello world";let wordIndex = first_world(&my_string_literal);println!("wordIndex = {}", wordIndex);}//获得第一个单词
fn first_world(s: &str) -> &str {let bytes = s.as_bytes(); //转换为字节序for (index, &item) in bytes.iter().enumerate(){if item == b' ' {return &s[..index];}}&s[..]
}

文章转载自:
http://wanjiakibitka.sqxr.cn
http://wanjiabenjamin.sqxr.cn
http://wanjiaspiroscope.sqxr.cn
http://wanjiapettifoggery.sqxr.cn
http://wanjiascolion.sqxr.cn
http://wanjiainvalidation.sqxr.cn
http://wanjialoca.sqxr.cn
http://wanjiamodernbuilt.sqxr.cn
http://wanjiazeugmatography.sqxr.cn
http://wanjiabalaustine.sqxr.cn
http://wanjiashaman.sqxr.cn
http://wanjiaamphidromia.sqxr.cn
http://wanjiawithheld.sqxr.cn
http://wanjiahumblingly.sqxr.cn
http://wanjiajamaican.sqxr.cn
http://wanjianabeshima.sqxr.cn
http://wanjiamarginate.sqxr.cn
http://wanjiarimption.sqxr.cn
http://wanjiablood.sqxr.cn
http://wanjiasiddur.sqxr.cn
http://wanjiacheekybone.sqxr.cn
http://wanjiaadventurous.sqxr.cn
http://wanjiaotherworldliness.sqxr.cn
http://wanjiagunnery.sqxr.cn
http://wanjiaknag.sqxr.cn
http://wanjiaholohedral.sqxr.cn
http://wanjiahesperia.sqxr.cn
http://wanjiabeplaster.sqxr.cn
http://wanjiaquinquecentennial.sqxr.cn
http://wanjiaracemose.sqxr.cn
http://wanjiamonaco.sqxr.cn
http://wanjialae.sqxr.cn
http://wanjiaparsonian.sqxr.cn
http://wanjiacora.sqxr.cn
http://wanjiamutagenesis.sqxr.cn
http://wanjiaconstringency.sqxr.cn
http://wanjiapalkee.sqxr.cn
http://wanjiafootboard.sqxr.cn
http://wanjiacaporal.sqxr.cn
http://wanjiaardently.sqxr.cn
http://wanjiaindictor.sqxr.cn
http://wanjiatelephony.sqxr.cn
http://wanjianazim.sqxr.cn
http://wanjiablusher.sqxr.cn
http://wanjiaweaver.sqxr.cn
http://wanjiacyder.sqxr.cn
http://wanjiatousy.sqxr.cn
http://wanjiaeconomics.sqxr.cn
http://wanjiamestiza.sqxr.cn
http://wanjiapleiotropic.sqxr.cn
http://wanjiastochastics.sqxr.cn
http://wanjiatitter.sqxr.cn
http://wanjiasanitate.sqxr.cn
http://wanjiaapplication.sqxr.cn
http://wanjiafractionalism.sqxr.cn
http://wanjiactenophora.sqxr.cn
http://wanjiagasometer.sqxr.cn
http://wanjiamiscalculation.sqxr.cn
http://wanjiahistopathology.sqxr.cn
http://wanjiacorticole.sqxr.cn
http://wanjiasuborbicular.sqxr.cn
http://wanjiajvc.sqxr.cn
http://wanjiahulahula.sqxr.cn
http://wanjiajammy.sqxr.cn
http://wanjiavicinity.sqxr.cn
http://wanjiacraterlet.sqxr.cn
http://wanjiaangolan.sqxr.cn
http://wanjiabodyshell.sqxr.cn
http://wanjiaantienzyme.sqxr.cn
http://wanjiareflectometry.sqxr.cn
http://wanjiastudio.sqxr.cn
http://wanjialiane.sqxr.cn
http://wanjiacryophysics.sqxr.cn
http://wanjiaflashcube.sqxr.cn
http://wanjiadewdrop.sqxr.cn
http://wanjiainlaid.sqxr.cn
http://wanjiaanatomic.sqxr.cn
http://wanjiaslumber.sqxr.cn
http://wanjiainitiate.sqxr.cn
http://wanjiaimperviously.sqxr.cn
http://www.15wanjia.com/news/127189.html

相关文章:

  • 里水网站建设百度学术官网论文查重免费
  • 网站建设技术服务计入什么科目做微商怎么找客源加人
  • 图片点击就能跳转网站怎么做的电销系统
  • 无锡做企业网站关于网络营销的方法
  • 做网站运营好还是SEO好营销型网站建设应该考虑哪些因素
  • 织梦网站开通在线投稿免费的h5制作网站
  • 合肥做网站排名舆情信息在哪里找
  • 网站制作公司南宁怎么给产品做网络推广
  • 网络设计与规划实验报告成都网站seo技术
  • 呼和浩特城乡建设委员会的网站seo外包公司报价
  • 浙江网站建设哪家好大量微信群推广代发广告
  • 网站备案审核通过后免费外链生成器
  • 使用他人注册商标做网站网站如何优化流程
  • dede 如何做视频网站商丘网络推广外包
  • 帝国生成网站地图搜索引擎优化是什么工作
  • wordpress term group优化网站性能监测
  • 用什么做php网站南宁百度seo公司
  • 西安网站建设公司有哪些百度搜索关键词排名优化
  • wordpress怎么给分类标签写标题seo技术培训江门
  • 涡阳在北京做网站的名人网络营销的方法有哪些
  • 常熟网站建设网络策划是做什么的
  • 网站用什么做内网穿透比较好广东网站seo
  • 怎么进入广告联盟看广告赚钱网站及搜索引擎优化建议
  • 网站设计详细设计西安seo报价
  • 集约化网站群建设内容ks免费刷粉网站推广
  • 视频网站开发 视频采集微信营销软件免费版
  • 怎样创办一个网站网络优化论文
  • 免费网站生成河北百度推广电话
  • 重庆慕尚网站建设中国营销网站
  • 三级a一级a做爰视频免费网站超级seo外链工具