可以通过std::env::var函数获取环境变量,该函数的返回结果为Result类型,可以通过is_ok方法来判断环境变量是否被设置。当环境变量被设置时,is_ok方法返回true,否则返回false。
示例:
let tem = std::env::var("TEST").is_ok();
可以使用eprintln!宏将错误信息输出到标准错误中,避免标准输出与标准错误的内容相混淆。
闭包是函数式编程中的基础概念,简要概括为,闭包是和上下文有关的函数,能够捕获其所在作用域中的变量。
在rust中,闭包为一个可以保存在变量中或作为参数传递的匿名函数。
不同与普通函数,编译器可以通过编译器推断参数及返回值类型,因此可以不标明参数及返回值类型(也可自己加上类型声明)。
但是,如果多次调用同一个闭包,且参数类型,返回值类型不同,则编译器将会报错。(不同于python或js中的闭包)。
示例:
// 普通函数
fn add_one_v1 (x:u32) -> u32 { x + 1 }
//带类型注解的闭包
let add_one_v2 = |x: u32 | -> uu323 { x + 1 };
//带花括号的闭包
let add_one_v3 = |x| { x + 1 };
//最简写法的闭包
let add_one_v4 = |x| x + 1 ;
即不对捕获到的变量进行修改,仅对其进行读取操作
即对捕获到的变量进行修改,但不改变所有权
值得注意的是,可变借用与其他借用不能同时存在,因此闭包定义与调用之间的作用域中不能有其他不可变借用,如,不能在闭包定义与调用之间的作用域出现捕获到的变量的输出语句。
即对捕获到的变量的所有权进行更改
可以通过move关键字强制捕获变量的所有权,在使用线程时,这点尤其重要。因为若只捕获不可变借用,主线程可能在新线程运行前将该变量丢弃,导致线程的不可变引用失效。
闭包能够捕获其环境中的变量的引用或所有权(影响什么移进闭包,如有),闭包体(函数体)中的代码定义了对引用或值进行的操作(影响什么移出闭包,如有)。
闭包体能够进行三种操作:
更改所有权或引用
修改具有可变引用或所有权的值
仅捕获不可变引用或压根不需要捕获变量
闭包自动、渐进地实现一个或多个Fn trait,无需显式声明,也可自行定义闭包实现的Fn trait
Fn trait有三种:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。