【发布时间】:2018-01-08 05:25:23
【问题描述】:
下面的代码无法编译,因为编译器认为我不应该分配给 t1,因为它是借用的,但实际上函数 always_returns_no_lifetime 将始终返回实际上没有的枚举的变体有一辈子,所以我可以修改t1。我怎样才能让编译器理解这一点,或者我应该如何重新组织我的代码以使这个错误不会发生?
#[derive(Clone)]
enum Types<'a> {
NoLifetime(i32),
AlsoNoLifetime(i32),
AlsoAlsoNoLifetime(i32),
HasLifetime(&'a str)
}
fn always_returns_no_lifetime<'a>(some_type: &'a Types) -> Types<'a> {
match *some_type {
Types::HasLifetime(text) => panic!("I only return the type that has no lifetime"),
_ => some_type.clone()
}
}
fn main() {
let mut t1 = Types::NoLifetime(20);
let copy = always_returns_no_lifetime(&t1);
t1 = Types::NoLifetime(30);
}
错误是:
error[E0506]: cannot assign to `t1` because it is borrowed
--> src/main.rs:23:5
|
21 | let copy = always_returns_no_lifetime(&t1);
| -- borrow of `t1` occurs here
22 |
23 | t1 = Types::NoLifetime(30);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `t1` occurs here
【问题讨论】:
标签: enums rust borrow-checker