Я читаю официальную Книгу ржавчины и смотрю листинг 4-8 в Разделе 4.3.
Код выглядит так:
fn first_word(s: &String) -> usize {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return i;
}
}
s.len()
}
fn main() {
let mut s = String::from("hello world");
let word = first_word(&s);
s.clear();
}
Эта строка:
let word = first_word(&s);
, кажется, заимствует неизменную ссылку на s
.(Здесь я предполагаю, что я не прав; я просто не знаю почему.)
В следующей строке мы изменяем s
, вызывая метод clear()
.
Я ожидал, что компилятор сгенерирует:
cannot borrow `s` as mutable because it is also borrowed as immutable
Почему этот компилятор?