【发布时间】:2016-06-21 16:12:03
【问题描述】:
我想解构对Copy-type 的引用并可变地绑定结果值。 注意:是的,我想创建给定参数的副本并改变该副本。这有效:
fn foo(a: &u64) {
let mut a = *a;
mutate(&mut a);
}
但我想通过在参数列表中解构来做到这一点。当我像这样解构时:
fn foo(&a: &u64) {
mutate(&mut a);
}
Rust(可以理解)抱怨:
<anon>:3:17: 3:18 error: cannot borrow immutable local variable `a` as mutable
<anon>:3 mutate(&mut a);
^
<anon>:1:9: 1:10 help: to make the local variable mutable, use `mut` as shown:
<anon>: fn foo(&mut a: &u64) {
但是编译器建议的解决方案不起作用!
<anon>:1:8: 1:14 error: mismatched types:
expected `&u64`,
found `&mut _`
(values differ in mutability) [E0308]
<anon>:1 fn foo(&mut a: &u64) {
^~~~~~
如何做我想做的事?
【问题讨论】:
-
感觉
fn foo(mut &a: &u64)应该可以工作,但它没有。 -
@Shepmaster 为什么它应该起作用?
mut适用于 names,而不是整个模式。您没有使引用可变,而是使a可变。 -
@delnan 我承认没有彻底考虑所有潜在的途径。也许它是 bad-ole-C-thinking - 用
&解构然后使结果可变。这就是为什么我发表评论而不是在答案中真正表现出我的无知^_^。 -
我认为这是不可能的。在这种情况下,您使用的是 Copy 类型,因此您可以只使用
mut a: u64而不是引用。然后,无论何时调用该函数,编译器都会为您生成一个可变副本。
标签: rust