Rust中是否有内置的标识功能?

Rust中是否有内置的标识功能?,rust,Rust,我有一个选项的向量s,我只想过滤一些s。我使用带有标识的filter\u map: let v = vec![Some(1), None, Some(2)]; for i in v.into_iter().filter_map(|o| o) { println!("{}", i); } 是否有一个内置函数允许编写类似于filter\u map(identity)?回答您的问题 锈蚀1.33后,请参见 在锈1.33之前,稳定锈中没有此类功能。您可以创建自己的: fn id<T>

我有一个
选项的向量
s,我只想过滤
一些
s。我使用带有标识的
filter\u map

let v = vec![Some(1), None, Some(2)];
for i in v.into_iter().filter_map(|o| o) {
    println!("{}", i);
}
是否有一个内置函数允许编写类似于
filter\u map(identity)
?回答您的问题 锈蚀1.33后,请参见

在锈1.33之前,稳定锈中没有此类功能。您可以创建自己的:

fn id<T>(v: T) -> T { v } 
在生锈1.29之前,使用:

另见:


有一个截至的函数。

请注意,
identity
比原始示例多4个字符;我想人们会懒得把它打印出来。@Shepmaster有时表现力比简洁要好:p@Shepmaster:正如你的回答一样,F#称之为
id
,因此至少在stdlib中有先例。Haskell也是如此。到处都是!当项目未移动时,我做了另一个:
fn id_deref(v:&Option)->Option{v.as_ref()}
@Boiethios考虑到它会改变值,我会非常犹豫是否调用类似“identity”的东西。我也不会称之为“deref”,因为这意味着Rust中的某些东西,而这不是函数所做的。而且,该功能是多余的;您可以只说
Option::as_ref
let v = vec![Some(1), None, Some(2)];
for i in v.into_iter().flatten() {
    println!("{}", i);
}
let v = vec![Some(1), None, Some(2)];
for i in v.into_iter().flat_map(|o| o) {
    println!("{}", i);
}