2014-12-14 15 views
5

Với mã bên dưới, tôi có thể kiểm tra EOF bằng cách nào? Hay đúng hơn, làm thế nào tôi có thể phân biệt giữa "không có gì ở đây" và "nó phát nổ"?Làm cách nào để kiểm tra EOF bằng `read_line()`?

match io::stdin().read_line() { 
    Ok(l) => print!("{}", l), 
    Err(_) => do_something_else(), 
} 

Trả lời

7

Sau Rust 1,0

read_line bây giờ có một bộ đệm để phụ thêm vào, vì vậy giá trị trả về đã trở thành biểu cảm hơn. Từ documentation for read_line:

If this reader is currently at EOF then this function will not modify buf and will return Ok(n) where n is the number of bytes which were read.

Trước Rust 1,0

Tôi đã kiểm tra standard library version của BufferPrelude::lines. Bạn sẽ muốn sử dụng một mô hình phù hợp chỉ định kind lỗi:

match self.buffer.read_line() { 
    Ok(x) => Some(Ok(x)), 
    Err(IoError { kind: EndOfFile, ..}) => None, 
    Err(y) => Some(Err(y)) 
} 

Là một sang một bên, bạn có thể sử dụng trực tiếp .lines():

for line in io::stdin().lock().lines() { 
    match line { 
     Ok(x) => ..., 
     Err(x) => ..., 
    } 
} 
Các vấn đề liên quan