在Rust中的for循环中不会分配字符串返回值

xet*_*a11 0 string for-loop variable-assignment 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
}
Run Code Online (Sandbox Code Playgroud)

当我输出verse(1)它工作正常 - 测试的字符串出现并完成.但是,当我分配的结果verse(1)String结合song,song似乎是空的?我不明白这种行为.

DK.*_*DK. 6

因为这不是范围的工作方式; 它与琴弦无关.如果您运行以下内容:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

您将获得以下输出:

c: 6
c: 7
d: 7
d: 6
Run Code Online (Sandbox Code Playgroud)

范围统计,他们永远不会倒计时. rev颠倒你给出的序列的顺序; 它不会将空序列变为非空序列.