Rust 文档是否提到在函数前面添加'mut'关键字的可能性';论据?

Rust 文档是否提到在函数前面添加'mut'关键字的可能性';论据?,rust,mutability,function-signature,Rust,Mutability,Function Signature,我有一个基本的阅读器封装了一些通用元素: pub struct Reader<R> { inner: R, order: Endian, first_ifd_offset: usize, } impl<R: Read + Seek> Reader<R> { pub fn new(reader: R) -> Result<Reader<R>> { let mut order_raw

我有一个基本的
阅读器
封装了一些通用元素:

pub struct Reader<R> {
    inner: R,
    order: Endian,
    first_ifd_offset: usize,
}

impl<R: Read + Seek> Reader<R> {
    pub fn new(reader: R) -> Result<Reader<R>> {
        let mut order_raw = [0, 0];
        reader.read_exact(&mut order_raw)?;
        let magic_number = u16::to_be(u16::from_bytes(order_raw));
        /* ... */
   }
}
pub结构读取器{
内线:R,
命令:Endian,
第一个ifd偏移量:使用,
}
impl阅读器{
pub fn new(阅读器:R)->结果{
让mut order_raw=[0,0];
读卡器。读卡器是否准确(&mut order_raw)?;
设magic_number=u16::to_be(u16::from_字节(order_raw));
/* ... */
}
}
这不会编译并产生以下错误:

error[E0596]:无法将不可变参数'reader'借用为可变参数
-->src/reader.rs:17:9
|
15 |新发布(读者:R)->结果{
把它改为“MUT阅读器”
16 |让mut order_raw=[0,0];
17 |读卡器。读卡器是否准确(&mut order_raw)?;
|^^^^^^^不能相互借用
当我按值获取参数时,
new
函数应该是
reader
元素的新所有者。编译器建议我在函数参数前面添加一个
mut
关键字

文档是否提到了在函数的参数前面添加
mut
关键字的可能性?我找不到相关的参考资料

标准库的
BufReader
结构具有 类似的
new
函数,不使用
mut
关键字,而是使用
unsafe

正文中的块代码。
不安全
是否阻止在函数签名中使用
mut

我认为编译器非常精确地说明了在何处添加
mut
。通常,编译器会在特定位置加下划线:

pub fn new(mut reader: R) -> Result<Reader<R>>
pub fn new(mut reader:R)->结果
现在可以在函数中变异读取器。其行为如下:

pub fn new(reader: R) -> Result<Reader<R>, Error> {
    let mut reader = reader;
    // ...
pub fn new(读取器:R)->结果{
让mut reader=reader;
// ...
据我所知,它只是在书中,但或多或少在某种意义上,它是一种模式,你也可以在函数中使用它

:

变异不可变数据-即通过共享引用访问的数据或由
let
绑定拥有的数据),除非该数据包含在


我认为编译器非常精确地指出了在哪里添加
mut
。通常,编译器会尝试在特定位置加下划线:

pub fn new(mut reader: R) -> Result<Reader<R>>
pub fn new(mut reader:R)->结果
现在可以在函数中变异读取器。其行为如下:

pub fn new(reader: R) -> Result<Reader<R>, Error> {
    let mut reader = reader;
    // ...
pub fn new(读取器:R)->结果{
让mut reader=reader;
// ...
据我所知,它只是在书中,但或多或少在某种意义上,它是一种模式,你也可以在函数中使用它

:

变异不可变数据-即通过共享引用访问的数据或由
let
绑定拥有的数据),除非该数据包含在


它是隐含的,但在书中没有直接提到。
let
和函数参数都是模式,所以就像你可以在
let
中使用
mut
一样,你可以在参数中使用它。

它是隐含的,但在书中没有直接提到。
let
和函数参数都是模式,所以就像你可以使用它一样在
let
中使用
mut
,您可以在参数中使用它。

只是为了确认,在
BufReader
的情况下,这是不需要的,因为在
new
函数中没有调用内部
Read
对象的
mutable
函数ufRead
&mut self
函数,我们假设我们获得了
BufRead
结构所获得的所有字段的可变性?@yageek如果我没有弄错您的评论,这是真的,是的。只需确认一下,在
BufReader
的情况下,这是不需要的,因为内部
Read
对象在
new
函数中被调用。如果稍后进行了这样的调用,但被另一个
BufRead
&mut self函数包装,我们假设我们获得了
BufRead
结构所获得的所有字段的可变性?@yageek如果我得到了正确的注释,这是真的,是的。在这种情况下,只是为了确认一下对于
BufReader
,这是不需要的,因为在
new
函数中没有调用内部
Read
对象的
&mut ref
函数。如果稍后进行此调用,但将其包装在另一个
BufRead
&mut self函数中,则我们假设已获得该字段的所有可变性BufRead struct已获取?只是为了确认,在
BufReader
的情况下,这是不需要的,因为在
new
函数中没有调用内部
Read
对象的
&mut ref
函数。如果稍后进行此调用,但将其包装在另一个
BufRead
&mut self函数中,我们假设我们获得了BufRead结构所获得的所有字段的可变性?