fn main() {
let name = String::from("worker");
let h = std::thread::spawn(|| println!("{}", name));
h.join().unwrap();
}Bu kod derlendiğinde ne olur?
- aDerlenir ve thread zamanlanınca
workeryazdırır - bDerlenir, ama
namethread çalışmadan düşebileceği için boş string basabilir - cE0373: closure
main'den uzun yaşayabilir amaname'i ödünç alıyor;moveşart✓ - dE0382:
nameclosure'a taşınıp sonrajointarafından yeniden kullanılıyor
Açıklama:
thread::spawn 'static bir closure ister: yeni thread main'in stack çerçevesi gittikten sonra da çalışıyor olabilir, bu yüzden closure yerel bir değişkeni ödünç tutamaz. Derleyici E0373 verir ve move || önerir; bu, name'in sahipliğini closure'a aktarır. Burada çalışma zamanı yolu yoktur, program hiç derlenmez.