Rust中元组引用与引用元组的类型关系及代码问题解析
元组引用与引用元组的类型关系问题
作为类型,元组的引用与引用的元组之间存在什么关系?为何示例中第一段代码可行,第二段却不行?
let a = 1; let b = 2; // 这段代码可行,c: &i32, d:&i32 let (c, d) = &(a, b); type TupleOfRef<'a> = (&'a i32, &'a i32); let e = (a, b); // 这段代码不可行 let f: TupleOfRef = &e;
我们重点关注类型(&'a A, &'a B)与(A, B)的关系。尽管Rust标准并未保证元组的内存布局,但显然无法在不克隆的情况下通过&A和&B得到&(A, B)——因为不存在同时存储A和B的单一内存地址。
不过,从(A, B)得到(&'a A, &'a B)是合理的:我们既拥有元组的地址&(A, B),也能获取其元素的地址&A和&B。示例的第一个案例正是这种情况,但第二个案例却无法直接实现。
实际需求正是第二个案例的功能:是否存在通用方法,从拥有所有权的元组(A, B, ..)得到(&A, &B, ..)?或者有没有合适的方式在trait bound中表达这种“匹配性”?
内容的提问来源于stack exchange,提问作者lighthouse
相关产品推荐
相关产品推荐

