2017-08-30 13 views
6

Tôi có một vector là Option và tôi chỉ muốn lọc Some giây. Tôi sử dụng filter_map đậm đà bản sắc:Có chức năng nhận diện tích hợp trong Rust không?

let v = vec![Some(1), None, Some(2)]; 
for i in v.into_iter().filter_map(|o| o) { 
    println!("{}", i); 
} 

Có một hàm dựng sẵn cho phép để viết một cái gì đó giống như filter_map(identity)?

+2

Lưu ý rằng 'danh tính' là 4 ký tự nhiều hơn ví dụ ban đầu của bạn; Tôi hy vọng mọi người sẽ quá lười biếng để loại nó ra^_ ^. – Shepmaster

+4

@Shepmaster Thỉnh thoảng biểu thức tốt hơn là ngắn gọn: p – Boiethios

+0

@Shepmaster: Như với câu trả lời của bạn, F # gọi nó là 'id', vì vậy có tiền lệ cho điều đó trong stdlib ít nhất. – ildjarn

Trả lời

6

Không, không có chức năng như vậy. Bạn có thể tạo của riêng bạn:

fn id<T>(v: T) -> T { v } 

Mặc dù hầu hết mọi người chỉ là nội tuyến mã, như bạn đã làm.

+0

Tôi đã tạo một mục khác khi mục không được di chuyển: 'fn id_deref (v: & Option ) -> Tùy chọn <&T> {v.as_ref()}' – Boiethios

+2

@Boiethios Tôi rất do dự khi gọi bất cứ điều gì như "nhận dạng "xem xét nó thay đổi giá trị. Tôi cũng không gọi nó là "deref" bởi vì đó có nghĩa là một cái gì đó trong Rust mà không phải là những gì chức năng đó. Ngoài ra, chức năng đó là thừa; bạn chỉ có thể nói 'Tùy chọn :: as_ref' thay thế. – Shepmaster

+0

Cảm ơn điểm cuối cùng, bạn dạy tôi điều gì đó. – Boiethios

Các vấn đề liên quan