为什么 io::copy 要求 reader 和 writer 都是可变引用?
Why does io::copy require the reader and writer to both be mutable references?
为什么 std::io::copy
要求 reader 和 writer 参数都需要作为可变引用传递?
我能理解为什么需要对 writer 进行突变以适应写入其中的数据,从而改变其内部状态。
但是,为什么 reader 也必须标记为可变引用?如果我只是读取数据,那么我是否只需要对给定类型的引用而不是可变引用?
因为 Read
类型通常是一次性的:通过读取它,您 是 改变它。
考虑标准输入:您只能从中读取一次,因此 某些东西 必须改变。当您从套接字读取时,您几乎肯定会改变一个内部缓冲区,该缓冲区用于说明您获得的网络数据包之间的差异,以及您在任何给定时刻要读取的数据量。从 Chain
中读取如何,它用于将可读的东西连接在一起;没有突变,它无法跟踪它应该从哪一个读取。
当然,可能 Read
类型不需要可变访问权限来执行读取,但这不是 普遍 是的,因为它不是普遍正确的,所以 Read
特征需要可变访问。
为什么 std::io::copy
要求 reader 和 writer 参数都需要作为可变引用传递?
我能理解为什么需要对 writer 进行突变以适应写入其中的数据,从而改变其内部状态。
但是,为什么 reader 也必须标记为可变引用?如果我只是读取数据,那么我是否只需要对给定类型的引用而不是可变引用?
因为 Read
类型通常是一次性的:通过读取它,您 是 改变它。
考虑标准输入:您只能从中读取一次,因此 某些东西 必须改变。当您从套接字读取时,您几乎肯定会改变一个内部缓冲区,该缓冲区用于说明您获得的网络数据包之间的差异,以及您在任何给定时刻要读取的数据量。从 Chain
中读取如何,它用于将可读的东西连接在一起;没有突变,它无法跟踪它应该从哪一个读取。
当然,可能 Read
类型不需要可变访问权限来执行读取,但这不是 普遍 是的,因为它不是普遍正确的,所以 Read
特征需要可变访问。