Rust元组引用解构疑问:类型推导为何与预期不符?
Rust解构多层引用时的类型推导问题
先看你的代码:
let t : &&mut (&str, u8) = &&mut ("hallo", 1u8); let (n, a) = t;
核心原因:自动解引用与模式匹配的引用绑定规则
多层引用的自动解引用:
t的类型是&&mut (&str, u8),也就是&( &mut ( &str, u8 ) )——一个不可变引用指向可变引用,可变引用再指向元组(&str, u8)。执行解构时,Rust会自动解引用t直到能匹配元组模式:先解外层的&得到&mut (&str, u8),此时已满足元组模式的匹配要求。不可变引用限制下的元素绑定:
虽然内部是&mut元组,但t本身是不可变引用(外层的&),这意味着你只能以不可变方式访问元组内容,无法修改。所以解构时,Rust会为每个元素生成不可变引用:- 元组第一个元素是
&str,对它的不可变引用就是&&str(即n的类型); - 元组第二个元素是
u8,对它的不可变引用就是&u8(即a的类型)。
- 元组第一个元素是
为什么你的预期不符合实际?
你预期n是&&mut &str,但这个类型并不存在于当前结构中:
- 元组里的第一个元素本身是
&str,并非&mut &str; - 外层的不可变引用限制了无法获取元素的可变引用,自然不会出现
&mut层级。
内容的提问来源于stack exchange,提问作者benjamin-lieser
相关产品推荐
相关产品推荐

