Это не работает:
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()
— это то же самое, что и &(word.chars())
, поэтому вы берете итератор и заимствуете его. В этом случае Rust указывает, что ссылка на Chars
(тип итератора) — это не итератор, а сам Chars
. Скобки полностью будут работать
for x in (&word).chars() { ... }
Но при вызове методов для вещей Rust умен и автоматически заимствует, так что вы можете просто сделать
for x in word.chars() { ... }
и Rust достаточно умен, чтобы знать, что str::chars
нужно только &self
и вставит &
для вас.
Приоритет оператора — но не работает ли просто
word.chars()
?