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

巴中市建设局网站网站开发培训好学吗

巴中市建设局网站,网站开发培训好学吗,百度指数查询平台,平台怎么推广技巧Rust中的闭包是一种可以存入外层函数中变量或作为参数传递给其他函数的匿名函数。你可以在一个地方创建闭包,然后在不同的上下文环境中调用该闭包来完成运算。和一般的函数不同,闭包可以从定义它的作用域中捕获值。 语法 闭包由“||”和“{}”组合而成。…

        Rust中的闭包是一种可以存入外层函数中变量或作为参数传递给其他函数的匿名函数。你可以在一个地方创建闭包,然后在不同的上下文环境中调用该闭包来完成运算。和一般的函数不同,闭包可以从定义它的作用域中捕获值。

 

语法

        闭包由“||”和“{}”组合而成。“||”中指定闭包的参数,如果有多个参数,使用逗号分隔。闭包的参数类型可以省略。管道符后可以指定返回值类型,但不是必需的。“{}”用来存放执行语句。如果闭包体只有一行,大括号也可以省略。闭包体中最后一个表达式的值默认为闭包的返回值。

fn main(){let add = |x: u32,y:u32| -> u32 {x+y};Println!("add :{}",add(1,2));
}

闭包的类型推断和类型标注

        和函数不同,闭包并不强制要求你标注参数和返回值的类型。因为闭包通常都相当短小,且只在狭窄的代码上下文中使用,而不会被应用在广泛的场景下。在这种限定环境下,编译器能够可靠地推断出闭包参数的类型及返回值的类型,就像是编译器能够推断出大多数变量的类型一样。下面使用add_one作用例子,感受一下:

let add_one_v2 = |x: u32| -> u32 {x+1};
let add_one_v3 = |x| { x + 1 };
let add_one_v4 = |x| x + 1 ;
fn add_one_v1(x:u32)->u32 {x+1}

捕获环境变量

        闭包和函数的最大区别是 ,它们可以捕获自己所在的环境并访问自己被定义时的作用域中的变量。所以闭包更像是一个的变量, 它具有和变量同样的生命周期

fn main() {let i = 1;let add = |x| {x + i};println!("add result: {}", add(7));}

        闭包可以通过3种方式从它们的环境中捕获值,这和函数接收参数的3种方式是完全一致的:获取所有权-FnOnce、可变借用-FnMut及不可变借用-Fn

Fn, 表示闭包以不可变借用的方式来捕获环境中的自由变量, 同时也表示该闭包没有改变环境的能力, 并且可以多次调用。 对应&self。

 FnMut, 表示闭包以可变借用的方式来捕获环境中的自由变量,同时意味着该闭包有改变环境的能力, 也可以多次调用。 对应&mut self。

FnOnce, 表示闭包通过转移所有权来捕获环境中的自由变量, 同时意味着该闭包没有改变环境的能力, 只能调用一次, 因为该闭包会消耗自身。 对应self

        那么, 对于一个闭包, 编译器是如何选择impl哪个trait呢? 答案是, 编译器会都尝试一遍, 实现能让程序编译通过的那几个。 闭包调用的时候, 会尽可能先选择调用Fn函数, 其次尝试选择FnMut函数, 最后尝试使用FnOnce函数。 这些都是编译器自动分析出来的。 下一次我们在具体研究一下,Fn,FnMut,FnOnce,他们其实是trait。

注意项:

1、因为结构体各个字段的类型在定义时就必须确定。但需要注意的是,每一个闭包实例都有它自己的匿名类型。换句话说,即便两个闭包拥有完全相同的签名,它们的类型也被认为是不一样的。

2、假如你希望强制闭包获取环境中值的所有权,那么你可以在参数列表前添加move关键字。

3、虽然编译器会为每个参数和返回值推断出一个具体的类型,但是如果多次调用同一闭包却传递不同类型的参数将会导致类型错误。代码如下所示,先使用i32类型的值作为闭包参数,编译器会推断参数和闭包返回值的类型都为i32,这样i32类型会被锁定在闭包中。再次使用&str类型的值作为闭包参数,会导致错误。

 let return_self = |x| x ;let i = return_self(1);let f = return_self("2") ;

http://www.yayakq.cn/news/69270/

相关文章:

  • 软件和网站开发福州科技网站建设怎么做
  • 网上购物的网站开发背景购房网
  • 做花茶的网站新能源电动汽车
  • 企业设计网站公司有哪些wordpress多站点统计
  • 网站备案回访电话号码巩义网站推广
  • 广东人才网官方网站招聘信息好看手机网站推荐
  • 重庆建网站cqiezscom深圳关键词自动排名
  • 西安哪家网站建设好app推广引流渠道
  • 扁平式网站建设网站制作一般怎么收费
  • 屯昌第三方建站哪家好用手机可以做网站
  • 两学一做网站是多少各大网站代下单怎么做
  • 上海网站建设公司哪家好如何做一个个人做网站
  • 成品网站短视频源码搭建做网站大型
  • 青岛哪家做网站的公司好家具网站建设公司
  • 正规网站建设首选公司建设公司网站 优帮云
  • 网页制作和网站开发c语言可以做网站吗
  • 中国网站为什么做的那么丑手机网站分类菜单
  • 网站ui外包做网站郑州
  • 公司网站开发与维护关于婚纱摄影的网站模板
  • 新闻类网站建设做网站常用的小语种有哪些
  • 北京高端网站免费crm网站下载的软件
  • 网络求职做阿姨哪个网站好西安制作网站公司哪家好
  • 深圳罗湖企业网站建设报价湘潭网页设计
  • 建网站做seowordpress 修改密码函数
  • layui 企业网站模板企业网站定制公司
  • 基于jquery做的网站泸州小程序定制开发
  • 个人电影网站建设收益网络推广培训机构排名深圳
  • 注册个免费网站国内优秀的设计网站推荐
  • 泰州网站建设方案开发网站建设比较好的律所
  • 网站首页的优化ps软件下载免费中文版