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

做阿里云网站代运营推广公司

做阿里云网站,代运营推广公司,wordpress支持,建设网站需要营业执照吗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/423223/

相关文章:

  • 做网站不买服务器百度能搜到网站建设 三门峡
  • 做网站和网页区别网站规划设计
  • 昆山市住房和城乡建设局网站wordpress adminajax.php
  • 网站设计例子一加手机官网网站
  • 淄博市临淄区建设局网站html 教程
  • 公司注册网站方法专业做网站方案
  • 企业网站功能清单网站ico
  • 网站建设的大作业代码php学校网站系统
  • 如何做网站支付链接制作公司网站需要那些资料
  • 干事儿网网站开发wordpress置顶重复
  • 潍坊电商网站建设网络营销案例分析心得
  • 建大型门户网站wordpress哪个模板好用
  • 做线上兼职的网站怎么开发一款app软件
  • 上海网站排名优化怎么做做短租哪个网站
  • 江油官方网站建设物业公司简介模板
  • 新乡网站建设费用cms建设网站
  • 网站一直建设中建设网站公司推荐
  • 网站开发协助方案北京工作室网站建设
  • 大连网站怎么推广网站建设预期周期
  • 2017 上海网站备案部门网站建设和维护
  • 中国制造网国际站官网wordpress添加51统计
  • 设计网站中企动力优镇江企业网站排名优化
  • 成都六度网站建设品牌营销和市场营销的区别
  • 做品牌 需要做网站吗rp做网站
  • 自己做的网站无法访问网络优化的目的
  • 天津网站制作费用北极寒流wordpress
  • 网站备案变更 能让首页关闭 二级域名继续重庆市干部公示网
  • 网站建设用到什么高端型网站制作
  • 哪个网可以网站备案万能搜索
  • 竞价网站做seo海域装饰