Как проверить EOF с помощью `read_line()`?
Учитывая приведенный ниже код, как я могу специально проверить EOF? Или, скорее, как я могу различить "здесь ничего нет" и "оно взорвалось"?
match io::stdin().read_line() {
Ok(l) => print!("{}", l),
Err(_) => do_something_else(),
}
1 ответ
Решение
После ржавчины 1,0
read_line
теперь требуется буфер для добавления, поэтому возвращаемое значение стало более выразительным. Из документации дляread_line
:
Если этот читатель в настоящее время на EOF, то эта функция не будет изменять
buf
и вернетсяOk(n)
гдеn
количество байтов, которые были прочитаны.
До Ржавчины 1.0
Я проверил стандартную версию библиотеки BufferPrelude::lines
, Вы хотите использовать сопоставление с шаблоном, который определяет kind
ошибки:
match self.buffer.read_line() {
Ok(x) => Some(Ok(x)),
Err(IoError { kind: EndOfFile, ..}) => None,
Err(y) => Some(Err(y))
}
В сторону, вы могли бы использовать .lines()
непосредственно:
for line in io::stdin().lock().lines() {
match line {
Ok(x) => ...,
Err(x) => ...,
}
}