本文简要介绍rust语言中 Function core::convert::identity
的用法。
用法
pub const fn identity<T>(x: T) -> T
身份函数。
关于这个函数有两点需要注意:
-
它并不总是等同于像
|x| x
这样的闭包,因为闭包可能会将x
强制转换为不同的类型。 -
它移动传递给函数的输入
x
。
虽然有一个只返回输入的函数可能看起来很奇怪,但有一些有趣的用途。
例子
使用 identity
在一系列其他有趣的函数中什么都不做:
use std::convert::identity;
fn manipulation(x: u32) -> u32 {
// Let's pretend that adding one is an interesting function.
x + 1
}
let _arr = &[identity, manipulation];
在条件中使用 identity
作为 “do nothing” 基本情况:
use std::convert::identity;
let do_stuff = if condition { manipulation } else { identity };
// Do more interesting stuff...
let _results = do_stuff(42);
使用 identity
保留 Option<T>
的迭代器的 Some
变体:
use std::convert::identity;
let iter = vec![Some(1), None, Some(3)].into_iter();
let filtered = iter.filter_map(identity).collect::<Vec<_>>();
assert_eq!(vec![1, 3], filtered);
相关用法
- Rust id用法及代码示例
- Rust i64.overflowing_add_unsigned用法及代码示例
- Rust i128.log2用法及代码示例
- Rust i16.log10用法及代码示例
- Rust i128.checked_div用法及代码示例
- Rust i64.abs用法及代码示例
- Rust i16.wrapping_add_unsigned用法及代码示例
- Rust i128.checked_next_multiple_of用法及代码示例
- Rust isize.unstable_div_floor用法及代码示例
- Rust i32.saturating_mul用法及代码示例
- Rust isize.swap_bytes用法及代码示例
- Rust i128.overflowing_pow用法及代码示例
- Rust i64.checked_add用法及代码示例
- Rust i16.wrapping_sub用法及代码示例
- Rust i128.overflowing_sub用法及代码示例
- Rust i64.saturating_abs用法及代码示例
- Rust isize.from_ne_bytes用法及代码示例
- Rust i16.wrapping_shr用法及代码示例
- Rust i128.overflowing_shr用法及代码示例
- Rust i128.overflowing_shl用法及代码示例
- Rust i16.unstable_div_floor用法及代码示例
- Rust i16.wrapping_abs用法及代码示例
- Rust i128.checked_sub_unsigned用法及代码示例
- Rust i32.checked_log2用法及代码示例
- Rust i128.overflowing_div用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Function core::convert::identity。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。