kullanarak take_while "ihtiyatlı" Ben IteratorExt
den take_while
gibi ama ilk başarısız öğeyi tüketmeden davranan bir yeni cautious_take_while
operasyon için temel olarak Peekable
kullanmak istiyorum uygulanması. (Bunun iyi bir fikir olup olmadığı ve bu amacı Rust'ta gerçekleştirmenin daha iyi bir yolu olup olmadığı sorusu var - bu yönde ipuçları için mutlu olurum, ancak çoğunlukla kodumun nerede olduğunu anlamaya çalışıyorum. kırma).Peekable
let mut chars = "abcdefg.".chars().peekable();
let abc : String = chars.by_ref().cautious_take_while(|&x| x != 'd');
let defg : String = chars.by_ref().cautious_take_while(|&x| x != '.');
// yielding (abc = "abc", defg = "defg")
Ben creating a MCVE here bir çatlak geçtiniz, ama ben alıyorum:
Ben etkinleştirmek için çalışıyorum API temelde Bildiğim kadarıyla söyleyebilirim
:10:5: 10:19 error: cannot move out of borrowed content :10 chars.by_ref().cautious_take_while(|&x| x != '.');
Ben, fonksiyon imzam açısından, Rust'un kendi TakeWhile
ile aynı modeli takip ediyorum, fakat borç kontrolöründen farklı farklı davranışlar görüyorum. Birisi yanlış yaptığım şeye işaret edebilir mi?
Teşekkürler @rodrigo! Http://is.gd/NalTYL adresinde çalışan bir örnek oluşturmak için ilk önerinizi ekledim. Ancak, yazımı http://is.gd/6c64vf dosyasında olduğu gibi yazmayı denediğimde, hata alıyorum: trait * core :: clone :: Clone *, * ve mut core türünde uygulanmadı: : iter :: Peekable * ', satır 43'teki satır sınırlarına' + Clone 'ekleyerek üstesinden gelemiyorum. –
Bosh
@Bosh. Emin değilim, ama değişebilen bir işaretçinin klonlanamayacağını düşünüyorum. Değişkeniniz muhtemelen "Clone" ı kabul eder, çünkü 'Peekable' implantasyonu' Clone 'açık bir şekilde. Belki de aynısını yapabilirsin, ama kodun bir miktar refactoringe ihtiyacı var ... – rodrigo
Harika. "Clone" dan türetmeyi durdurdum ve zaman çizelgelerini temizledim: http://is.gd/ljjJAE. Yardımlarınız ve açıklamalarınız için tekrar teşekkürler! – Bosh