2016-10-23 58 views
21

爲什麼std::io::copy要求讀寫器參數都需要作爲可變引用傳遞?爲什麼io :: copy要求讀寫器都是可變引用?

我可以理解爲什麼作者需要進行變異以適應正在寫入的數據,並改變其內部狀態。

但是,爲什麼讀者也必須被標記爲可變引用?如果我只是讀數據,那麼我是不是隻需要一個給定類型的引用而不是可變引用?

回答

29

因爲Read類型,一般來說是一次性的:通過讀取它,你突變它。

考慮標準輸入:你只能從那讀一次,所以東西必須改變。當您從套接字讀取數據時,幾乎可以肯定會突變一個內部緩衝區,用於說明您獲得的網絡數據包之間的差異以及您想要在特定時間讀取多少數據。如何從Chain閱讀,這是用來連接可讀的東西在一起;沒有突變,它不能跟蹤它應該從哪個讀取。

當然,這是可能Read類型不需要可變的訪問進行讀取,但是這不是普遍真實的,因爲它不是普遍適用的Read特質要求可變的訪問。

+0

這實際上是一個點亮晶瑩剔透的解釋。謝謝! –

+5

即使在「文件」中,您也正在更新當前的讀取偏移量。 –

相關問題