字符串 return 值未在 Rust 的 for 循环中分配
String return value does not get assigned within for-loop in Rust
鉴于此代码片段:
pub fn verse(start_bottles: i32) -> String {
let mut song_template: String = "%1 of beer on the wall, %2 of beer.\n%3, %4 of beer on the wall.\n".to_string();
match start_bottles {
0 => lyrics_no_bottles(&mut song_template),
1 => lyrics_one_bottle(&mut song_template),
2 => lyrics_two_bottles(&mut song_template),
_ => lyrics_more_bottles(&mut song_template, start_bottles)
}
song_template
}
pub fn sing(first: i32, last: i32) -> String {
let mut song: String = "".to_string();
for num in (8..6).rev() {
song = verse(1);
}
song
}
当我输出 verse(1)
时,它工作正常 - 测试的字符串出现并且完整。但是当我将 verse(1)
的结果赋值给 String
绑定 song
时,song
似乎是空的?我不明白这种行为。
因为这不是范围的工作方式;跟琴弦没关系。如果您 运行 以下内容:
fn main() {
for i in 8..6 {
println!("a: {}", i);
}
for i in (8..6).rev() {
println!("b: {}", i);
}
for i in 6..8 {
println!("c: {}", i);
}
for i in (6..8).rev() {
println!("d: {}", i);
}
}
您得到以下输出:
c: 6
c: 7
d: 7
d: 6
范围仅向上计数,从不向下计数。 rev
颠倒你给它的序列的顺序;它不会将空序列变成非空序列。
鉴于此代码片段:
pub fn verse(start_bottles: i32) -> String {
let mut song_template: String = "%1 of beer on the wall, %2 of beer.\n%3, %4 of beer on the wall.\n".to_string();
match start_bottles {
0 => lyrics_no_bottles(&mut song_template),
1 => lyrics_one_bottle(&mut song_template),
2 => lyrics_two_bottles(&mut song_template),
_ => lyrics_more_bottles(&mut song_template, start_bottles)
}
song_template
}
pub fn sing(first: i32, last: i32) -> String {
let mut song: String = "".to_string();
for num in (8..6).rev() {
song = verse(1);
}
song
}
当我输出 verse(1)
时,它工作正常 - 测试的字符串出现并且完整。但是当我将 verse(1)
的结果赋值给 String
绑定 song
时,song
似乎是空的?我不明白这种行为。
因为这不是范围的工作方式;跟琴弦没关系。如果您 运行 以下内容:
fn main() {
for i in 8..6 {
println!("a: {}", i);
}
for i in (8..6).rev() {
println!("b: {}", i);
}
for i in 6..8 {
println!("c: {}", i);
}
for i in (6..8).rev() {
println!("d: {}", i);
}
}
您得到以下输出:
c: 6
c: 7
d: 7
d: 6
范围仅向上计数,从不向下计数。 rev
颠倒你给它的序列的顺序;它不会将空序列变成非空序列。