为什么io :: copy要求读者和作者都是可变引用?

Ral*_*veo 23 immutability traits rust

为什么std::io::copy需要将reader和writer参数作为可变引用传递?

我可以理解为什么编写器需要进行变异才能容纳写入数据的数据,从而改变其内部状态.

但是,为什么读者也必须被标记为可变参考?如果我只是在读数据,那么我不是只需要对给定类型的引用而不是可变引用吗?

DK.*_*DK. 30

因为Read类型通常是一次性的:通过阅读它,你正在改变它.

考虑标准输入:你只能读取一次,所以必须改变一些东西.当您从套接字读取时,您几乎肯定会改变内部缓冲区,用于解释您获得的网络数据包之间的差异,以及您希望在任何给定时刻读取的数据量.如何读取a Chain,用于将可读的东西连接在一起; 没有突变,它无法跟踪它应该从哪一个读取.

当然,有可能有一种Read不需要可变访问来执行读取的类型,但这并不是普遍正确的,并且因为它并非普遍适用,所以Read特征需要可变访问.

  • 即使在`File`上,您也要更新当前的读取偏移量. (7认同)