boş yineleyici dönmekŞartlı <code>foo</code> için bu tanım dikkate alındığında flat_map
let result: Vec<_> = foo.iter()
.enumerate()
.flat_map(|(i, row)| if i % 2 == 0 {
row.iter().map(|x| x * 2)
} else {
std::iter::empty()
})
.collect();
ama eğer bir hata yükseltir ve uyumsuz türlere sahip olan maddeler. Ben geçici olarak map
çıkarmadan çalıştı ve ben kapatılması dışında boş bir vektör tanımlayan ve böylece gibi o aşkın bir yineleyici dönen çalıştı:
let empty = vec![];
let result: Vec<_> = foo.iter()
.enumerate()
.flat_map(|(i, row)| if i % 2 == 0 {
row.iter() //.map(|x| x * 2)
} else {
empty.iter()
})
.collect();
Bu biraz saçma görünüyor ama derler. map
'u rahatsız etmemeye çalışırsam, yine de uyumsuz türlere sahip olan if ve else cümleleri hakkında şikâyetçi olur. Ben bazı iç içe for
döngüler ile istediğimizi yapar ama bunu yazmak için bir terse yol varsa bilmek istiyorum o şey yazabilirsiniz biliyor
error[E0308]: if and else have incompatible types
--> src/main.rs:6:30
|
6 | .flat_map(|(i, row)| if i % 2 == 0 {
| ______________________________^
7 | | row.iter().map(|x| x * 2)
8 | | } else {
9 | | std::iter::empty()
10 | | })
| |_________^ expected struct `std::iter::Map`, found struct `std::iter::Empty`
|
= note: expected type `std::iter::Map<std::slice::Iter<'_, {integer}>, [[email protected]/main.rs:7:28: 7:37]>`
found type `std::iter::Empty<_>`
: Burada hata mesajının parçası yineleyicileri kullanarak.
"*' | _ | if i% 2 == 0 {true} else {false} '*" Lütfen, sadece '| _ | i% 2 == 0 '...; -] – ildjarn
@ ümjarn hah, evet. Ayrıca modülleri kapamadan kaldırdım. derleyici yine de onu optimize edebilir. – the8472