我想與Redis數據庫進行惰性連接。我有一個Db
結構,它包含Redis Client
。默認情況下它是None
。下面是示例代碼在Python:返回對可選結構成員的可變引用
import redis
class Db:
def __init__(self):
self.client = None
def get_client(self):
if self.client is None:
self.client = redis.StrictRedis(host='127.0.0.1')
return self.client
我想這
extern crate redis;
use redis::Client;
struct Db {
client: Option<Client>,
}
impl Db {
fn new() -> Db {
Db { client: None }
}
fn get_client(&mut self) -> Result<&Client, &'static str> {
if let Some(ref client) = self.client {
Ok(client)
} else {
let connection_string = "redis://127.0.0.1";
match Client::open(connection_string) {
Ok(client) => {
self.client = Some(client);
Ok(&self.client.unwrap())
}
Err(err) => Err("Error!"),
}
}
}
}
fn main() {
let mut db = Db::new();
db.get_client();
}
而且我有編譯錯誤。我幾乎明白編譯器說什麼,但我不知道如何解決這個問題。
error: borrowed value does not live long enough
--> src/main.rs:28:29
|
28 | Ok(&self.client.unwrap())
| ^^^^^^^^^^^^^^^^^^^^ does not live long enough
29 | },
| - temporary value only lives until here
|
note: borrowed value must be valid for the anonymous lifetime #1 defined on the body at 19:66...
--> src/main.rs:19:67
|
19 | fn get_client(&mut self) -> Result<&Client, &'static str> {
| ^
error[E0507]: cannot move out of borrowed content
--> src/main.rs:28:29
|
28 | Ok(&self.client.unwrap())
| ^^^^ cannot move out of borrowed content
OP要求一個可變引用; 'as_ref'提供了一個不變的參考。我鼓勵你回答OP的*陳述問題,以便將來的搜索者可以得到答案。如果這不能回答OP的* actual *問題,那麼我也會解釋爲什麼它不需要在這種情況下是可變的。 – Shepmaster
是的,你可以exaplain嗎? – sinitsynsv