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

医院网站源码 asp大数据分析

医院网站源码 asp,大数据分析,怎样建设单位网站,太原网站建设主页4.3.0 写在正文之前 在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权&#xff1…

4.3.0 写在正文之前

在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。

本章有三小节:

  • 所有权:栈内存 vs. 堆内存
  • 所有权规则、内存与分配
  • 所有权与函数(本文)

喜欢的话记得点赞、收藏加关注哦,想要跟着学下去记得关注专栏哦

4.3.1. 把值传递给函数

在语义上,把值传递给函数和把值赋给变量是类似的,所以一句话总结:函数参数传递跟赋值操作是一样的

接下来详细解释一下:把值传递给函数将会发生移动(Move)或者复制(Copy)

  • 对于实现了Copy trait的数据类型,会发生复制,所以原本的变量不受影响,能够继续使用
  • 对于没有实现Copy trait的数据类型,会发生复制,所以原本的变量会被弃用,不可使用

Copy trait、移动、复制的详细介绍在上一篇文章4.2. 所有权规则、内存与分配有讲,这里不再作阐述

fn main(){let machine = String::from("6657");wjq(machine);let x = 6657;wjq_copy(x);println!("x is:{}", x);
}fn wjq(some_string::String){println!("{}", some_string);
}fn wjq_copy(some_number::i32){println!("{}", some_number);
}
  • 对于变量machine

    • String 是一种复杂数据类型,分配在堆上,并且没有实现Copy trait。
    • machine 被传递给 wjq 函数时,发生了移动(Move),即所有权从变量 machine 转移到了函数参数 some_string
    • 此时,machine 的所有权被转移,函数 wjq 可以正常使用它,但原来的变量 machine 不再可用。如果尝试在之后使用 machine,编译器会报错。
  • 对于变量x

    • i32 是一种基本数据类型,大小固定,分配在栈上,并且实现了 Copy trait。
    • x 被传递给 wjq_copy 函数时,发生了复制(Copy),即变量 x 的值被复制了一份传递给了函数参数 some_number
    • 由于是值的复制,原变量 x 不受影响,可以在函数调用之后继续使用。
  • 对于变量some_string

    • 其作用域从第10行被声明开始,到第12行的}时就离开了作用域
    • 在离开作用域时Rust会自动调用drop函数释放变量some_string所占的内存
  • 对于变量some_number

    • 其作用域是从第14行被声明开始,到第16行的}时就离开了作用域
    • 离开作用域时不会有特殊的事情发生,因为实现了Copy trait的类型在离开作用域时不会调用 Drop

4.3.2. 返回值与作用域

函数在返回值的过程中同样也会发生所有权的转移。

fn main(){let s1 = give_ownership();let s2 = String::from("6657");let s3 = takes_and_gives_back(s2);
}fn give_ownership() -> String {let some_string = String::from("machine");some_string
}fn takes_and_gives_back(a_string:String) -> String {a_string
}
  • 函数 give_ownership 的行为:

    • give_ownership 函数创建了一个 String 类型的变量 some_string,它的所有权属于 give_ownership 函数。
    • some_string 作为返回值返回时,其所有权被转移到调用者,即变量 s1
    • 结果是,some_string 离开 give_ownership 的作用域后不会被释放,因为它的所有权已交给 s1
  • 函数 takes_and_gives_back 的行为:

    • takes_and_gives_back 函数接受一个 String 类型的参数 a_string。调用该函数时,传入的参数(s2)的所有权被转移到函数的参数 a_string
    • 函数将 a_string 返回时,其所有权从 a_string 再次转移给调用者,即变量 s3
    • 此时,变量 s2 不再可用,因为其所有权已被转移给 takes_and_gives_back,而函数的返回值赋给了 s3

一个变量的所有权总是遵循同样的模式:

  • 把一个值赋给其它变量时就会发生移动,只有实现了Copy trait 的类型(如基本类型i32, f64 等),在赋值时才会进行复制
  • 当一个包含堆数据的变量离开作用域时,它的值就会被drop函数清理掉,除非数据的所有权被移动到另一个变量上。

4.3.3. 让函数使用某个值而不获得其所有权

有的时候代码的本意是让函数使用变量,但不想因此失去对数据的使用权,这时候就可以这么写:

fn main(){let s1 = String::from("Hello");let (s2, len) = calculate_length(s1);println!("The length of '{}' is {}", s2, len);
}fn calculate_length(s:String) -> (String, uszie) {let length = s.len();(s, length)
}

在这个例子中,s1不得不把所有权交给s,但这个函数在返回时把s也原封不动地返回,把数据所有权交给了s2,这样做就把数据所有权又交给了main函数里的变量,使得s1下的数据又能够在main函数中使用(虽然换了个变量名)。

这种做法太麻烦,也太笨了。 Rust针对这种场景有一个特性叫引用(Reference),让函数使用某个值而不获得其所有权。 这个特性将会在下篇文章中讲。

http://www.tj-hxxt.cn/news/95017.html

相关文章:

  • 怎么免费建立网店网站浙江seo外包费用
  • 云南省住房和城乡建设局网站站长之家端口扫描
  • 企业网站 建设 外包娱乐热搜榜今日排名
  • 手机wap网站开发教程常见的网络推广方法有哪些
  • 重庆市有网站设计维护厨师培训机构 厨师短期培训班
  • 怎样制作企业的网站谷歌排名优化入门教程
  • 佛山网站建设找千界餐饮最有效的营销方案
  • 网站建设开发文档品牌网络营销策划
  • wordpress后台白屏搜索引擎优化自然排名
  • 邯郸市哪里有做网站的怎么注册网站平台
  • 做网站属于什么备案seo是什么味
  • 跨境商城网站开发alexa全球网站排名分析
  • 网站用户黏度表现在企业邮箱怎么申请
  • 淘宝客网站怎么做分销网络广告营销案例有哪些
  • 浪琴手表网站网络营销推广方案案例
  • 上海网站建设的企业网络营销的四个步骤
  • wordpress自定義欄目seo搜索引擎优化方法
  • 网站建设毕业论文百度文库网站分析培训班
  • 做静态网站成本域名网站
  • 如何制作自己的网站页制作最近一周新闻大事件
  • 企业网站友好性分析企业网站建设多少钱
  • 网站被降权严重吗百度app推广
  • 与网站开发有关的岗位是哪些潍坊seo关键词排名
  • wordpress4.8汉化大连seo建站
  • 望城经济建设开区门户网站seo创业
  • 2024 b站永不收费网站外贸推广
  • 甘肃做网站找谁搜索引擎是什么意思
  • 品牌网站建设 结构上海seo优化公司kinglink
  • 网站建设花费网络广告
  • 给帅哥做奴视频网站合肥优化排名推广