Ben Rust öğreniyorum ve ben stdin
gelen tamsayı dizisi okumak için aşağıdaki kodu yazdım:bir `değer ömrünü artırmak için bağlayıcı let`
use std::io;
fn main() {
for line in io::stdin().lines() {
let xs:Vec<int> = line.unwrap().as_slice().trim().split(' ')
.map(|s|from_str::<int>(s).unwrap()).collect();
println!("{}", xs);
}
}
Ancak bu, iyi çalıştı hissettim let xs
çizgi biraz uzun, o yüzden ikiye bölmek:
fn main() {
for line in io::stdin().lines() {
let ss = line.unwrap().as_slice().trim().split(' ');
let xs:Vec<int> = ss.map(|s|from_str::<int>(s).unwrap()).collect();
println!("{}", xs);
}
}
Bu işe yaramadı! Rust, aşağıdaki hatayı yanıtladı:
hello.rs:4:12: 4:25 error: borrowed value does not live long enough
hello.rs:4 let ss = line.unwrap().as_slice().trim().split(' ');
^~~~~~~~~~~~~
hello.rs:3:34: 7:3 note: reference must be valid for the block at 3:33...
hello.rs:3 for line in io::stdin().lines() {
hello.rs:4 let ss = line.unwrap().as_slice().trim().split(' ');
hello.rs:5 let xs:Vec<int> = ss.map(|s|from_str::<int>(s).unwrap()).collect();
hello.rs:6 println!("{}", xs);
hello.rs:7 }
hello.rs:4:3: 4:54 note: ...but borrowed value is only valid for the statement at 4:2; consider using a `let` binding to increase its lifetime
hello.rs:4 let ss = line.unwrap().as_slice().trim().split(' ');
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
Bu beni şaşırtıyor. Yeterince uzun yaşamadığı line
veya ss
mu? Ve ömürlerini arttırmak için izin vermeyi nasıl kullanabilirim? Zaten bir izin kullandım mı sandım?
Web için çözümler arıyor ve Lifetime guide aracılığıyla okudum, ancak yine de tam olarak anlayamıyorum. Herkes bana bir ipucu verebilir mi?
Sadece doğru bir şekilde anladığımdan emin olmak için, 'CharSplits' satırın içindeki değere referans verir. Ama aslında, 's' satırının bittiği anda atılan' Ok 'dan alınan bir kopyaya atıfta bulunuyor. Tüm değerleri blokun sonuna kadar canlı tutmak yerine? –
Evet. Geçici değerler sadece o değeri üreten ifadenin bulunduğu deyim için geçerlidir. –
"Satır" ın içine işaret etmemesi bir hafıza kaybı değil mi? –