在 Rust 中覆盖时,如何防止上一行中的字符出现?

How do I prevent characters from the previous line from appearing when overwriting it in Rust?

我有以下代码可以让控制台输出出现在同一行。但是,如果先前打印的值的长度大于其后的值,则会显示较长值的剩余部分。我在 Python 等语言中看到过关于同一事物的其他问题,但我不确定如何在 Rust 中克服这个问题。

这是一个例子:

use std::io::prelude::*;

fn main() {
    let fruits = ["Blueberry", "Orange", "Cherry", "Lemon", "Apple"];
    print_value(&fruits);
}

fn print_value(e: &[&str]) {
    for val in e {
        print!("\rStatus: {}", val);
        std::io::stdout().flush().unwrap();
        // pause program temporarily
        std::thread::sleep(std::time::Duration::new(2, 0));
    }
}

一些终端有一个特殊的字符序列,打印时会清除当前光标位置右侧的行。

VT100 兼容终端有一个字符序列 EL0。在 Rust 中可以用 "\x1B[K".

表示

这里有一个 thingy 可以证明一个例子。

要以更便携的方式做到这一点,您可以使用终端库,例如 term and it's delete_line 方法。