元组引用和引用元组作为类型之间的关系是什么?
为什么第一个可以工作,而第二个不行?
let a = 1;
let b = 2;
// This works, c: &i32, d:&i32
let (c, d) = &(a, b);
type TupleOfRef<'a> = (&'a i32, &'a i32);
let e = (a, b);
// This doesn't
let f: TupleOfRef = &e;
为了更清晰地阐述我的问题,它更多关于类型(&'a A, &'a B)
与(A, B)
的关系。
虽然元组的内存布局不能保证,但很明显不能通过克隆来从&A
和&B
制作出&(A, B)
,因为没有一个内存地址持有A
和B
。
然而,制作(&A, &B)
使得(A, B)
有些意义,因为我们不仅有元组的地址(即&(A, B)
),还有它的元素的地址(即&A
和&B
,正如@etchesketch所提到的)。这在上面例子的第一种情况中似乎有效,但第二种情况不是。
(&A,&B,..)
的方式输出?或者有没有任何好的方法来表达这些“匹配性”在特质限定中?下一个问题:元组的引用和元组的引用的类型级操作