Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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)()