У меня есть базовая Reader
инкапсуляция некоторых общих элементов:
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));
/* ... */
}
}
Не компилируется и выдает следующую ошибку:
error[E0596]: cannot borrow immutable argument `reader` as mutable
--> src/reader.rs:17:9
|
15 | pub fn new(reader: R) -> Result<Reader<R>> {
| ------ consider changing this to `mut reader`
16 | let mut order_raw = [0, 0];
17 | reader.read_exact(&mut order_raw)?;
| ^^^^^^ cannot borrow mutably
Поскольку я получаю аргумент по значению, функция new
должна быть новым владельцем элемента reader
. Компилятор советует мне добавить ключевое слово mut
перед аргументом функции.
Упоминает ли в документации возможность добавления ключевого слова mut
перед аргументами функций? Мне не удалось найти ресурсы, упоминающие об этом.
Структура BufReader
стандартной библиотеки имеет
похожая функция new
и не использует ключевое слово mut
, но unsafe
блочный код в теле. unsafe
препятствует использованию mut
в сигнатуре функции?