2016-10-23 49 views
21

Neden std::io::copy, hem okuyucu hem de yazar argümanlarının değişebilir referanslar olarak iletilmesini gerektiriyor?Neden io :: copy hem okuyucu hem de yazarın değişken referanslar olmasını gerektiriyor?

İçindeki durumu değiştirerek, yazılan verileri barındırmak için yazanın neden mutasyona uğraması gerektiğini anlayabiliyorum. Bununla birlikte, neden bir okuyucu aynı zamanda değiştirilebilir bir referans olarak işaretlenmelidir? Eğer sadece veri okuyorsam, o zaman belirli bir tür için referansa gerek duymayacağım ve değiştirilemez bir referansa gerek duymayacak mıyım?

cevap

29

Read türleri genelde tek vuruşludur: Çünkü ondan okuyarak, siz mutasyona uğrarsınız.

Standart girdiyi göz önünde bulundurun: yalnızca bir defadan okuyabilirsiniz, bu nedenle 'un değişmesi gerekir. Bir soketten okunduğunuzda, aldığınız ağ paketleri arasındaki farkları ve herhangi bir anda ne kadar veri okumak istediğinizi hesaba katmak için kullanılan dahili bir arabelleği neredeyse muhasebeleştiriyorsunuz. Okunabilir şeyleri bir araya getirmek için kullanılan Chain'dan okumaya ne dersiniz? mutasyon olmadan, hangisinin okunması gerektiğini izleyemez.

Tabii, bu mümkün bir okuma gerçekleştirmek değişken erişime ihtiyacı olmayan bir Read tür olması, ama bu evrensel doğru değil, ve evrensel olarak doğru değil, çünkü Read özellik değişken erişimi gerektirir.

+0

Bu aslında spot açık kristal netliğidir. Teşekkürler! –

+5

'File' üzerinde bile, mevcut okuma ofseti güncelleniyor. –