本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。