let a = Some(Box::new(5));
let b: Option<&Box<i32>> = a.as_ref();
let c: &Box<i32> = b.unwrap();
println!("{}", c); // 5
println!("{:?}", b); // Some(5)
println!("{:?}", a); // Some(5)
这里我使用了unwrap
来获取Option中的值,按理说我调用完unwrap
之后,b
应该会被drop,但是这里我依然能够使用它。
unwrap
调用的时候不是会获取所有权吗?
1
共 3 条评论, 1 页
评论区
写评论反对楼上改成String, 和i32: Copy没有关系; 附议一楼,单纯只是因为Option<&T>: Copy.
使用
as_ref
只会获得一个不可变引用;另外,你这里的例子是
i32
类型的,会直接在栈上 Copy 一份新的,应该用 String 测试:见:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0f5bfd89fcf50dd3481a8c7f7cf783b3
另外,
take
方法才会拿出所有权:报错value被move掉:
注意看两个例子里面显式标注的类型;
因为
Option<&Box<i32>>: Copy