假设我有以下结构
struct Test {
value : i32,
}
Run Code Online (Sandbox Code Playgroud)
我为它实现了以下方法
impl Test {
fn take_ownership(self) -> Option<Self> {
if self.value >= 0 {
Some(self)
} else {
None
}
}
}
Run Code Online (Sandbox Code Playgroud)
value我很擅长在大于 的情况下消耗所有权0,但是如何重写代码以便在None返回的情况下不消耗所有权?
您可以返回一个Result失败的所有权实例作为错误类型:
struct Test {
value: i32,
}
impl Test {
fn take_ownership(self) -> Result<i32, Self> {
if self.value >= 0 {
Ok(self.value)
} else {
Err(self)
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这仍然会消耗self,但您可以在之后恢复它。
另请记住,您以后随时可以Option获取Result:
fn main() {
let t = Test { value: 10 };
let value = t.take_ownership().ok();
println!("{value:?}");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |