Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 为什么io::copy要求读写器都是可变引用?_Rust_Immutability_Traits - Fatal编程技术网

Rust 为什么io::copy要求读写器都是可变引用?

Rust 为什么io::copy要求读写器都是可变引用?,rust,immutability,traits,Rust,Immutability,Traits,为什么需要将reader和writer参数都作为可变引用传递 我可以理解为什么编写器需要进行变异,以适应写入其中的数据,从而改变其内部状态 然而,为什么阅读器也必须标记为可变引用?如果我只读取数据,那么我不需要对给定类型的引用而不是可变引用吗?因为读取类型通常是一次性的:从中读取,就是对其进行变异 以标准输入为例:您只能从中读取一次,因此某些内容必须发生变化。当您从套接字读取数据时,几乎可以肯定的是,您正在修改一个内部缓冲区,该缓冲区用于解释您获得的网络数据包之间的差异,以及您在任何给定时刻想要

为什么需要将reader和writer参数都作为可变引用传递

我可以理解为什么编写器需要进行变异,以适应写入其中的数据,从而改变其内部状态


然而,为什么阅读器也必须标记为可变引用?如果我只读取数据,那么我不需要对给定类型的引用而不是可变引用吗?

因为
读取
类型通常是一次性的:从中读取,就是对其进行变异

以标准输入为例:您只能从中读取一次,因此某些内容必须发生变化。当您从套接字读取数据时,几乎可以肯定的是,您正在修改一个内部缓冲区,该缓冲区用于解释您获得的网络数据包之间的差异,以及您在任何给定时刻想要读取的数据量。如何从
读取,该链用于将可读内容连接在一起;如果没有变异,它就无法跟踪它应该从哪一个读取


当然,
Read
类型可能不需要可变访问来执行读取,但这不是普遍正确的,因为它不是普遍正确的,
Read
特性需要可变访问。

这实际上是一个非常清晰的解释。谢谢