kullanmak zincirini iter` değişiklik yapmaya. Ancak, benim kendi yetiştirme için, ben bu (bir Iter
için LockResult
dönüştürmeden) standart Result
/Option
yöntemleri kullanmak gibi bir şey değiştirmeye çalışıyorlar:`Ben benzeyen bir fonksiyona sahip vb` and_then`,
store.read().ok()
.and_then(|g| (*g).get(key))
.and_then(|v| v.read().ok())
.map(|v| (*v).clone());
Ama bu g does not live long enough
bu beni anlatıyor. Çeşitli yerlerde ref
ve as_ref
eklemeyi denedim, ancak derlemek için alamıyorum. Neyi kaçırıyorum?
Ben o gibi işe alabilirsiniz biliyorum:
store.read().ok()
.and_then(|g| {
(*g).get(key)
.and_then(|v| v.read().ok())
.map(|v| (*v).clone())
})
Ama iter
durumda gibi zincire bunu yapabilmek istiyorum.
(Potansiyel olarak soru yok) Bu, iter() ve 'into_iter()' arasındaki fark değil mi? Sahipliğinizi zincirin geri kalanına taşımak için 'into_iter()' işlevini kullanmak isteyebilirsiniz, böylece referanslarınız boyunca yaşarsınız? –
@SimonWhitehead, yorum için teşekkürler! Evet, bence bu tam olarak 'iter' ile 'into_iter' arasındaki farktır - ama tersine. I ** yapmak 'iter' yerine 'in_iter 'kullanmak istiyorum, ve aslında' iter 'gibi bir şey yapan bir' ve_then' varyasyonu istiyorum, ama 'as_ref' doğru açılanını anlayamıyorum vb. bunu yapar. 'In_iter' kullanmak için yukarıdaki ilk örneği değiştirdiğimde, ikinci örneğimle aynı hata mesajlarını alıyorum. –
Oyun parkında bir MVCE'yi benim için başkaları ile uğraştığını sanmıyorum. –