2015-03-03 89 views
5

我正试图在Rust中打印到stdout中的状态指示器。在其他语言中,我使用了一个清除当前stdout行而不改变其他语言的函数。我似乎无法找到一个Rust等价物。有一个吗?下面是我要找的如何清除stdout的当前行?

for i in 0..1000 { 
    stdio::print(format!("{}", i).as_slice)); 
    stdio::clear(); 
} 
+0

你在哪个平台上?你在想什么其他语言的相应功能? – 2015-03-03 17:14:35

回答

5

在ANSI终端上(几乎除Windows上的命令提示符以外的所有内容),\r将光标返回到当前行的开头,允许您在其上写入其他内容(新内容或空白字符以清除您的内容已经写了)。

print!("\r") 

标准库中没有任何东西可用于以平台无关的方式执行此操作。

0

利用退格键的ASCII码的一个小例子是一个选项,例如:

print!("12345"); 
print!("{}", (8u8 as char)); 

这最终将输出“1234”后的5由于打印退格字符(ascii code 8)而被删除。奇怪的是,Rust并不认为\ b是一个有效的字符转义。

+1

''你会退格。 Rust并不认为'\ b'是一个有效的转义,一点也不奇怪;它不是绝对标准的逃跑之一,尽管它很常见。 – 2015-03-03 06:07:18

2

cli是一个箱子(docs),它似乎很好地解决了这个问题。它还附带一些其他常见的好东西,如进度条和样式提示。

cli::clear应该是你想要的功能。

使用类似重复的主要困难:

println!("\r"); 

的是,这会不会是在使用CLI跨操作系统兼容::清楚应该只要有问题的OS支持。在这里使用cli箱子的另一个好处是,它是一个更高层次的抽象,以清晰的方式传达您的实际含义。

您想清除终端。

您不想重复获得回车。

还有其他的例程在这里类似的东西。即进度条,这是你正在努力解决的问题。