如何解决关于Rust的所有权
我对Rust的所有权有疑问。
我没有使用Rust,但是我知道Rust具有所有权概念,Rust通过所有权管理内存。 我了解到Rust阻止了在编译时访问无效的内存。
如果有以下代码
& 7zip x $zipFile "-o$output" "-p$zipFilePassword"
我想知道以下情况的结果。
let s1 = String::from("hello");
let s2 = s1;
println!("{},world!",s1);
if条件可以是兰特或来自用户的输入等。
if执行if语句s1将移至s2,并且在if语句结束时将其删除。 在这种情况下,访问println上的s1将产生错误。
但如果未执行if语句,则对s1的访问有效。 在这种情况下Rust如何运作?
感谢阅读。
解决方法
该状况影响不大。由于if
可能会移动s1
,因此编译器必须考虑将其移至其他范围。
在playground上:
fn main() {
let s1 = String::from("hello");
if std::env::args().next() == None { // runtime check
let _s2 = s1;
}
println!("{},world!",s1);
}
error[E0382]: borrow of moved value: `s1`
--> src/lib.rs:10:28
|
5 | let s1 = String::from("hello");
| -- move occurs because `s1` has type `std::string::String`,which does not implement the `Copy` trait
6 | if std::env::args().next() == None {
7 | let _s2 = s1;
| -- value moved here
...
10 | println!("{},s1);
| ^^ value borrowed here after move
如果遇到需要从中转移值的情况,请使用Option
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。