我想解构对var baseURL:String {
#if DEBUG
return "https://debug.myserver.url.com"
#else
return "https://production.myserver.url.com"
#endif
}
- 类型的引用,并可变地绑定结果值。 注意:是的,我想创建给定参数的副本并改变该副本。这有效:
Copy
但我想通过参数列表中的解构来做到这一点。当我这样解构时:
fn foo(a: &u64) {
let mut a = *a;
mutate(&mut a);
}
Rust(可以理解)抱怨:
fn foo(&a: &u64) {
mutate(&mut a);
}
但是编译器建议的解决方案不起作用!
<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) {
如何做我想做的事?
答案 0 :(得分:2)
我认为你不能这样做。虽然模式可以解构数据(即,引入数据部分的绑定),并且绑定可以标记为可变,但在解构引用的情况下,似乎并不是将两者结合起来的方法,即使其他组合工作:
struct X(i32);
let it = X(5);
let X(mut inside) = it;
inside = 1;
这可能只是一个边缘情况,其他句法选择没有留下好的可能性。正如您所注意到的那样,&mut x
已经被采用,并且模式中不支持使用括号消除歧义。
这不是一个大问题,因为有几种方法可以在模式之外做同样的事情:
let mut x = x;
)let mut x = *reference;
,所以引用并不是非常有用。试图在参数列表中过于聪明,无论如何都不利于可读性。
答案 1 :(得分:1)
这似乎适用于Rust操场:
fn foo(mut a: &mut u64) {
mutate(a);
}
简短回答是你需要接受一个可变参数,该参数具有u64
的可变引用类型。我无法提供更好的答案,我还在学习。
您可以在此处看到一个有效的示例:Rust Playground
如果我理解你的要求,我并不是百分百肯定,但是值得一试。