나는 todo 목록 예제를 만들기 위해 Nickel.rs와 놀고있다. 클로저는 현재 지원되지 않으므로 구현 된 간단한 구조를 다른 방법으로 처리하려고합니다.Rust의 정적 구조체
extern crate nickel;
use std::io::net::ip::Ipv4Addr;
use nickel::{Nickel, Request, Response};
struct TaskList {
list: Vec<String>
}
impl TaskList {
fn new() -> TaskList {
TaskList { list: Vec::new() }
}
fn add_task (&mut self, task: &str) {
&self.list.push(task.to_string());
}
fn get_tasks (&self) -> Vec<String> {
self.list.to_vec()
}
}
fn main() {
let mut server = Nickel::new();
static mut sample : TaskList = TaskList { list: Vec::new() };
sample.add_task("First");
sample.add_task("Second");
fn fetch_tasks (_request: &Request, response: &mut Response) {
response.send(sample.get_tasks().to_string())
}
server.utilize(Nickel::static_files("./public"));
server.get("/task", fetch_tasks);
server.listen(Ipv4Addr(127, 0, 0, 1), 6767);
}
하지만 컴파일러는 나에게 쓰기이 : "가변 정적 항목 소멸자를 할 수 없습니다"
당신은 내가이 문제를 해결할 수있는 방법에 대한 조언을해야합니까 여기
내 코드?
필자는 'sample'변수를 정적으로 만들지 않고 main() {}에서 정의했기 때문에 'fetch_tasks'함수에서 액세스 할 수 있다고 가정했습니다. 하지만 컴파일러는 'fetch_task'에서 동적 인 환경을 포착 할 수 없다고 말하면서 클로저를 사용해야합니다. 하지만 router.get()에는 두 번째 매개 변수에 대한 함수가 필요합니다. –
@ThomasC__'Request' 문맥이 주어지면'TaskList' 핸들을 접근 할 수 있도록 "미들웨어"를 사용해야 할 것입니다. 미들웨어의 몇 가지 예를 확인해보십시오. – BurntSushi5