考虑以下代码(在操场上):
// calling this function move the ownership of nbr to is_even
// at the end of the function is_even doesn't give the ownership back
fn is_even(nbr: Box<i32>) -> bool {
*nbr % 2 == 0
}
fn main() {
let integer = Box::new(42);
if is_even(integer) {
print!("is even ");
}
println!("{}", integer);
}
我收到以下错误消息:
example.rs:10:17: 10:24 error: use of moved value: `integer` [E0382]
example.rs:10 println!("{}", integer);
example.rs:7:13: 7:20 note: `integer` moved here because it has type `Box<i32>`, which is non-copyable
example.rs:7 if is_even(integer) {
我不明白为什么。好的,当我调用 时is_even
,我将所有权授予此函数,但在该函数结束时is_even
不再需要所有权。这是一个不可变(只读)的所有权转移,所以我们确定它不会在main
保留时被删除integer
-> 使用它似乎是安全的。
还是有这个错误。为什么以及解决方法是什么?