Моя программа должна прочитать некоторые параметры из командной строки. Если кто-то не предоставляет необязательный параметр пароля, программа должна запросить его. Поэтому соответствующее поле моделируется как тип Option
.Прочитать ввод в ветви соответствия шаблона
Это хорошо работает, если параметр обеспечивается из командной строки (параметр, имеющий значение Some("...")
, но ветвь согласования None
случай не требует ввода.
Упрощенная программа выглядит
fn main() {
use std::io::{self,Read};
let arg : Option<String> = None; // Does not terminate
//let arg : Option<String> = Some("Some arg".to_string()); // works well printing 'Some arg'
println!("Checking for password");
let password = match arg {
Some(val) => val.to_string(),
None => {
print!("Password:");
let mut buffer = String::new();
io::stdin().read_to_string(&mut buffer).unwrap();
buffer
}
};
println!("password is {}", password);
}
Запуск программы preinitialized с Some("Some arg")
выводит строку «пароль Некоторые аргумент» в консоли, как и ожидалось, но переключение на None ничего не делает, даже не завершение программы.
Не могли бы вы заметить мою ошибку или дать мне совет? Я использую rustc verison rustc 1.4.0 (8ab8581f6 2015-10-27)
. Заранее спасибо.
Спасибо, это была одна проблема. Другой заключается в том, что я должен очистить выходной поток, чтобы получить подсказку на консоли. Поэтому после печати нужно добавить '' io :: stdout :: flush() ''. – 0x0me