【发布时间】:2021-06-01 23:30:15
【问题描述】:
bar()的定义:
pub fn bar(self) -> Result<String>
编译器给我一个错误:
println!("{}", foo.bar()?);
let deserialized = serde_json::from_str(&foo.bar()?)?; // Use of 'foo' after move
为什么println 会移动foo?当我将另一个变量绑定到foo.bar() 时,编译器就可以了。
编辑:这基本上就是我所拥有的
let res = reqwest::blocking::get(request_path)?;
println!("{}", res.text()?);
------ `res` moved due to this method call
let deserialized = serde_json::from_str(&res.text()?)?;
^^^ value used here after move
【问题讨论】:
-
在我看来这是对
bar()的第一次调用,它取得了foo的所有权并且没有归还它,与println!无关。有效的完整代码是什么? -
很难回答您的问题,因为它不包含minimal reproducible example。我们无法分辨代码中存在哪些 crate(及其版本)、类型、特征、字段等。如果您尝试在Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在全新的 Cargo 项目中,然后在edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
-
请edit 您的问题并粘贴您所得到的准确和完整的错误——这将帮助我们了解问题所在,以便我们能够提供最好的帮助。有时试图解释错误消息很棘手,实际上错误消息的不同部分很重要。请使用直接运行编译器的消息,而不是 IDE 生成的消息,它可能会尝试为您解释错误。
标签: rust