【发布时间】:2019-12-09 02:04:31
【问题描述】:
我有一个结构的引用。
我需要一个结构的引用。有时是一样的,但有时是克隆然后修改的。
现在,我愿意
if condition {
let mut copy = original.clone();
copy.select();
do_big_thing(©);
} else {
do_big_thing(original);
}
但do_big_thing 接受其他参数,我不喜欢重复这一行。
有没有办法
- 首先构建引用,可以是原始引用,也可以是对本地修改克隆的引用
- 然后在
do_big_thing中使用它(它不必活得更久)
?
这当然行不通,因为copy 的寿命不够长:
let mut reference = if condition {
let mut copy = original.clone();
copy.select();
©
} else {
original
};
do_big_thing(reference);
由于这个问题是关于找到一种更简洁、更简洁的方式来编写相同的东西(使用原始引用或克隆),我不能接受会在运行时增加开销或一些 unsafe 的解决方案。
【问题讨论】:
-
你只需要对你的代码做一点小小的改动:play.rust-lang.org/…
-
@SvenMarnach 这是谢普的回答。是的,这很简单,但我不知道这是允许的
-
这里有两个很好的答案,由于编译器优化,两者都具有零成本。我建议未来的读者看看这两个答案。
标签: rust