2017-08-01 140 views
-1

我想捕獲SQLite空結果並正確地打印消息或結果。爲什麼query_map的結果不會打印任何內容?

我準備的聲明中,結果解壓到MyStruct,檢查結果是SomeNone(空),如果它在for循環Some打印結果。

此代碼正確匹配SomeNone,但不顯示任何信息:如果我刪除所有match報表和只放本刊環路一切

let mut stmt = conn.prepare(&query).expect("execute error"); 
let mut rows = stmt.query_map(&[&par_a, &par_b], |row| { 
    MyStruct { 
     a: row.get(0), 
     b: row.get(1), 
     c: row.get(2), 
    } 
}).expect("query_map error"); 

match rows.next() { 
    Some(_x) => { 
     println!("Some"); 
     for result in rows { 
      println!("{:?}", result.unwrap()); 
     } 
    } 
    None => println!("The result is empty. Try again."), 
} 

正常工作:

for result in rows { 
    println!("{:?}", result.unwrap()); 
} 

回答

1

你是扔掉迭代器的結果

match rows.next() { 
    Some(_x) => { 

_x表示「我想忽略這個變量,編譯器,不要抱怨它」。除了你不想忽略它

Some(row) => { 
    println!("Some"); 
    println!("{:?}", row.unwrap()); 
} 
+1

@twistezo你只調用'next'一次*,所以你只能得到一個結果*。我不清楚爲什麼你認爲你會得到多個。我強烈推薦重讀[* Rust編程語言*,第二版](https://doc.rust-lang.org/stable/book/second-edition/),特別是[控制流程的章節] (https://doc.rust-lang.org/stable/book/second-edition/ch03-05-control-flow.html)(特別是'loop')和[關於迭代器的章節](https:// doc.rust-lang.org/stable/book/second-edition/ch13-02-iterators.html)。您的原始代碼已經遍佈所有內容('for result in rows')。 – Shepmaster

相關問題