Перебор символов по ссылке на строку

Это не работает:

let mut word = String::from("kobin");
for x in &word.chars() {
    println!("looping through word: {}", x);
}

Но это работает:

let mut word = String::from("kobin");
let word_ref = &word;
for x in word_ref.chars() {
    println!("looping through word: {}", x);
}

какая разница. Разве оба не ссылаются на word?

Приоритет оператора — но не работает ли просто word.chars()?

Ry- 18.03.2022 03:58
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
1
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

&word.chars() — это то же самое, что и &(word.chars()), поэтому вы берете итератор и заимствуете его. В этом случае Rust указывает, что ссылка на Chars (тип итератора) — это не итератор, а сам Chars. Скобки полностью будут работать

for x in (&word).chars() { ... }

Но при вызове методов для вещей Rust умен и автоматически заимствует, так что вы можете просто сделать

for x in word.chars() { ... }

и Rust достаточно умен, чтобы знать, что str::chars нужно только &self и вставит & для вас.

Другие вопросы по теме