struct Floor{
requestHandler: Option<RequestHandler>
}
struct RequestHandler{
uri: StrBuf,
handler: fn() -> StrBuf
}
impl Floor {
fn do_something(&self){
//(&self.requestHandler.unwrap().handler)();
//expected function but found `&fn() -> std::strbuf::StrBuf`
//(*(&self.requestHandler.unwrap().handler))();
//cannot move out of dereference of `&`-pointer
//(self.requestHandler.unwrap().handler)();
//cannot move out of dereference of `&`-pointer
}
}
fn main() {
let foo = Floor {
requestHandler: None
};
foo.do_something();
}
В do_something
я стараюсь, чтобы добраться до моего fn
, который хранится на handler
свойство моей RequestHandler
структуры.Почему я не могу назвать свою функцию?
Независимо от того, что я пытаюсь, я просто не могу его назвать (см. Сообщения компилятора под моими неудачными попытками в коде).
Благодарим за ответ! Можете ли вы объяснить, что мешает ему переместить 'RequestHandler'? Зачем нам нужна ссылка? Не может ли он просто переместить его, если это необходимо? Это может показаться очень глупым, но я пытаюсь получить более глубокое понимание всего этого стека, кучи, указателя, ссылок. – Christoph
У меня нет времени на полный ответ, но в учебнике несколько излагаются эти идеи ([разделы с 9 по 11] (http://doc.rust-lang.org/master/tutorial.html#ownership)) и Николас Мацакис [недавняя «гарантия безопасности памяти в ржавчине»] (https://air.mozilla.org/guaranteeing-memory-safety-in-rust/) касается заимствования и владения. – huon
Да, я читал это несколько раз и также смотрел это видео. Я понимаю это теоретически, но пока не могу применить его ко всем моим собственным примерам. В эти дни мне хотелось бы лучше понять C/C++. Было бы очень полезно при изучении Rust. – Christoph