Rust 为什么可以';我不能调用我的函数吗? 结构层{ requestHandler:选项 } 结构请求处理程序{ uri:StrBuf, 处理程序:fn()->StrBuf } 植入层{ fn做某事(&self){ //(&self.requestHandler.unwrap().handler)(); //预期函数,但找到“&fn()->std::strbuf::strbuf”` //(*(&self.requestHandler.unwrap().handler)); //无法移出`&`-指针的取消引用 //(self.requestHandler.unwrap().handler)(); //无法移出`&`-指针的取消引用 } } fn main(){ 让foo=地板{ requestHandler:无 }; foo.做点什么; }
在Rust 为什么可以';我不能调用我的函数吗? 结构层{ requestHandler:选项 } 结构请求处理程序{ uri:StrBuf, 处理程序:fn()->StrBuf } 植入层{ fn做某事(&self){ //(&self.requestHandler.unwrap().handler)(); //预期函数,但找到“&fn()->std::strbuf::strbuf”` //(*(&self.requestHandler.unwrap().handler)); //无法移出`&`-指针的取消引用 //(self.requestHandler.unwrap().handler)(); //无法移出`&`-指针的取消引用 } } fn main(){ 让foo=地板{ requestHandler:无 }; foo.做点什么; },rust,Rust,在dou_something中,我尝试访问我的fn,它存储在我的RequestHandler结构的handler属性中 无论我尝试什么,我似乎都无法调用它(请参阅代码中失败尝试下的编译器消息)。问题在于以下签名: 也就是说,它引用一个选项,并为您提供一个选项,其中包含对原始选项所包含内容的引用,这意味着.unwrap将为您提供该引用,指向self中的请求处理程序,以便按照您的意愿进行处理 impl Option<T> { fn unwrap<'r>(&'r
dou_something
中,我尝试访问我的fn
,它存储在我的RequestHandler
结构的handler
属性中
无论我尝试什么,我似乎都无法调用它(请参阅代码中失败尝试下的编译器消息)。问题在于以下签名: 也就是说,它引用一个
选项
,并为您提供一个选项
,其中包含对原始选项
所包含内容的引用,这意味着.unwrap
将为您提供该引用,指向self
中的请求处理程序
,以便按照您的意愿进行处理
impl Option<T> {
fn unwrap<'r>(&'r self) -> Option<&'r T> { ... }
}
谢谢你的回答!您能否解释是什么阻止它移动
RequestHandler
?为什么我们需要参考资料?如果必须的话,它不能移动它吗?这听起来可能很愚蠢,但我正试图对所有这些堆栈、堆、指针和引用的东西有更深入的理解。我没有时间给出完整的答案,但教程多少涵盖了这些想法()和Nicholas Matsakis关于借款和所有权的论述。是的,我已经读了很多遍,也看了那个视频。我在理论上理解它,但我还不能把它应用到我自己的所有例子中。这些天我希望我能更好地理解C/C++。在学习锈病时会很有帮助。好吧,我想你的意思是,也许您可以告诉我这是否正确:RequestHandler
必须移动,这实质上意味着Floor。RequestHandler
将变为null
,这是不允许的,因为Floow
拥有RequestHandler
属性。因此,我们需要得到一个不必移动RequestHandler
的引用。是否正确?更新:get\u ref
对于选项
似乎不再存在。
impl Option<T> {
fn unwrap(self) -> T { ... }
}
impl Option<T> {
fn unwrap<'r>(&'r self) -> Option<&'r T> { ... }
}
(self.requesthandler.as_ref().unwrap().handler)()