gpt4 book ai didi

rust - ref 能做什么而 references 不能?

转载 作者:行者123 更新时间:2023-11-29 08:02:43 24 4
gpt4 key购买 nike

ref 可以做什么而引用不能?可以

match value.try_thing() {
&Some(ref e) => do_stuff(e),
// ...
}

不等于

match value.try_thing() {
&Some(e) => do_stuff(&e),
// ...
}

最佳答案

Editor's note — this answer was posted when the question was titled "Was Rust's ref keyword avoidable?". The OP has since changed the title, making the phrasing of the answer less sensible.

不,您建议的语法无法避免。在允许移动的情况下,您的语法不允许引用。在此示例中,innerval 中整数的副本,更改它对 val 没有影响:

fn main() {
let mut val = Some(42);

if let &mut Some(mut inner) = &mut val {
inner += 1;
}

println!("{:?}", val); // Some(42)
}

需要ref关键字来强制引用:

fn main() {
let mut val = Some(42);

if let &mut Some(ref mut inner) = &mut val {
*inner += 1;
}

println!("{:?}", val); // Some(43)
}

Match ergonomics 允许以更简单的方式编写:

fn main() {
let mut val = Some(42);

if let Some(inner) = &mut val {
*inner += 1;
}

println!("{:?}", val);
}

但是,如果我们只从这种语法开始,那么我们可能会遇到相反的问题和关键字,一个是强制移动;也许 Some(move inner)。在那个替代宇宙中,会有一个问题询问 move 关键字是否可以避免。

另见:

关于rust - ref 能做什么而 references 不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58292554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com