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

时间:2016-10-23 03:35:18

标签: rust immutability traits

为什么std :: io :: copy要求reader和writer参数都需要作为可变引用传递? 我可以理解为什么编写器需要进行变异才能容纳写入数据的数据,从而改变其内部状态。 但是,为什么读者也必须被标记为可变参考?如果我只是在读数据,那么我不是只需要对给定类型的引用而不是可变引用吗?

1 个答案:

答案 0 :(得分:30)

因为Read类型通常是一次性的:通过阅读它,你 突变它。

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

当然,可能Read类型,不需要可变访问权来执行读取,但是普遍是真的,并且因为它并非普遍适用,Read特征要求可变访问。