Her öğeyi oluşturan ve düz bir Vec (her sırayla birleştirilen) olarak depolayan bir functor'dan 2 boyutlu bir matris yapmaya çalışıyorum.Yuvalanmış haritada kapaklar nasıl kullanılır?
Her satırı oluşturmak ve birleştirmek için yuvalanmış bir harita (aslında bir flat_map ve yuvalanmış bir harita) kullandım. Here is what I tried:
fn make<T,F>(n: usize, m: usize, f: F) -> Vec<T>
where F: Fn(usize,usize) -> T
{
(0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
}
fn main() {
let v = make(5,5, |x,y| x+y);
println!("{:?}", v);
}
Ne yazık ki, (her zamanki 'yeterince uzun yaşamaz') derleme sırasında bir hata alıyorum. İç içe geçmiş haritalarda kapaklar nasıl kullanılır?
<anon>:4:36: 4:46 error: `y` does not live long enough
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~
<anon>:4:5: 4:58 note: reference must be valid for the method call at 4:4...
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<anon>:4:25: 4:47 note: ...but borrowed value is only valid for the scope of parameters for function at 4:24
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~~~~~~~~~~~~~
(Ben bu konuda
by using a single map on 0..n*m çalıştı, ama hala cevap ilgileniyorum.)
Senin durumunda
Belki bir http://stackoverflow.com/q/28521637/155423 kopyası mı? – Shepmaster
Y beri umuyorum: usize Kopya-mümkün oldu, bu iç kapatma tarafından değer tarafından alınabilir, böylece herhangi bir borçlanma ihtiyacını ortadan kaldırarak ... – Gyscos
Katılıyorum ve burada bir hata olduğunu biraz şaşırdım all - Bu 'FnMut' ile ilgili bir his var. Aynı zamanda gerçek bir hata da olabilir. Yağmurlama '.clone()' da tüm değişkenler problemi çözmediği gibi ben de düşündüm. – Shepmaster