Joe*_*ley 2 language-design pattern-matching rust
为什么Rust有ref关键字?可以
match value.try_thing() {
&Some(ref e) => do_stuff(e),
// ...
}
Run Code Online (Sandbox Code Playgroud)
不能由
match value.try_thing() {
&Some(e) => do_stuff(&e),
// ...
}
Run Code Online (Sandbox Code Playgroud)
不,您建议的语法无法避免。您的语法不允许引用,否则将允许移动。在此示例中,inner是的整数副本,对其进行val更改不会影响val:
fn main() {
let mut val = Some(42);
if let &mut Some(mut inner) = &mut val {
inner += 1;
}
println!("{:?}", val); // Some(42)
}
Run Code Online (Sandbox Code Playgroud)
ref需要使用关键字来强制引用:
fn main() {
let mut val = Some(42);
if let &mut Some(ref mut inner) = &mut val {
*inner += 1;
}
println!("{:?}", val); // Some(43)
}
Run Code Online (Sandbox Code Playgroud)
Match人机工程学允许以更简单的方式编写代码:
fn main() {
let mut val = Some(42);
if let Some(inner) = &mut val {
*inner += 1;
}
println!("{:?}", val);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果仅从这种语法开始,那么我们可能会遇到相反的问题和关键字,一个是强制移动。也许吧Some(move inner)。在该替代宇宙中,会有一个问题询问move关键字是否可以避免。
也可以看看:
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |