Rust 从模式中提取引用
示例
有时有必要仅使用引用就可以从对象中提取值(即,无需转让所有权)。
struct Token {
pub id: u32
}
struct User {
pub token: Option<Token>
}
fn main() {
//创建具有任意令牌的用户
let user = User { token: Some(Token { id: 3 }) };
//让我们通过引用来借用用户
let user_ref = &user;
// This match expression would not compile saying "cannot move out of borrowed
// content" because user_ref is a borrowed value but token expects an owned value.
match user_ref {
&User { token } => println!("User token exists? {}", token.is_some())
}
//通过在我们的模式中添加“ref”,我们指示编译器为我们提供参考
//而不是拥有的价值。
match user_ref {
&User { ref token } => println!("User token exists? {}", token.is_some())
}
//我们也可以将ref与销毁相结合
match user_ref {
//'ref'将允许我们通过引用访问期权内部的令牌
&User { token: Some(ref user_token) } => println!("Token value: {}", user_token.id ),
&User { token: None } => println!("There was no token assigned to the user" )
}
//引用也可以是可变的,让我们创建另一个用户来演示这一点
let mut other_user = User { token: Some(Token { id: 4 }) };
//给用户一个可变的参考
let other_user_ref_mut = &mut other_user;
match other_user_ref_mut {
//'refmut'为我们提供了可变的引用,使我们可以直接更改包含的值。
&mut User { token: Some(ref mut user_token) } => {
user_token.id = 5;
println!("New token value: {}", user_token.id )
},
&mut User { token: None } => println!("There was no token assigned to the user" )
}
}它将打印此:
User token exists? true Token value: 3 New token value: 5
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短