Rust 在模式匹配中,如何获得Box所持有的值?

Rust 在模式匹配中,如何获得Box所持有的值?,rust,enums,Rust,Enums,为了通过示例回忆昨晚从《铁锈》第三章学到的内容,我创建了一个enum链表类型: #[派生(调试)] 枚举列表{ 无 Cons(i32,框), } 我尝试将tail()方法附加到此类型,如下所示: impl列表{ //未显示不相关的代码 fn尾部和自身)->自身{ 匹配自我{ Self::Cons(u,ref tail)=>tail, 零=>零, } } } 但我得到以下编译器错误: 错误[E0308]:类型不匹配 -->\ee枚举调用链接列表。rs:32:40 | 30 | fn尾部和自身)

为了通过示例回忆昨晚从《铁锈》第三章学到的内容,我创建了一个
enum
链表类型:

#[派生(调试)]
枚举列表{
无
Cons(i32,框),
}
我尝试将
tail()
方法附加到此类型,如下所示:

impl列表{
//未显示不相关的代码
fn尾部和自身)->自身{
匹配自我{
Self::Cons(u,ref tail)=>tail,
零=>零,
}
}
}
但我得到以下编译器错误:

错误[E0308]:类型不匹配
-->\ee枚举调用链接列表。rs:32:40
|
30 | fn尾部和自身)->自身{
|----由于返回类型,应为'List'
31 |匹配*自我{
32 | Self::Cons(|,ref tail)=>tail,
|^^^^应为枚举“列表”,找到“&框”`
|
=注意:应为枚举列表`
找到引用“&”框`
这是令人困惑的,因为我用同样的风格编写了一些附加
length()
方法的代码,使我相信变量
tail
实际上是
List
类型的

impl列表{
//未显示不相关的代码
fn长度(自身)->i32{
匹配自我{
Self::Cons(_,ref tail)=>1+tail.length(),
_ => 0,
}
}
}
所以,我想知道:

  • 变量
    tail
    所持有的值的类型是什么
  • 如果
    tail
    不是一个
    列表,为什么
    tail.length()
  • 如何与
    tail
    中包含的列表进行匹配

你对
List::tail
的意图是什么?它接受一个引用,但返回一个值。你打算如何获得这个拥有的值:从一个不可变的引用中窃取?制作一个克隆?在我的生锈之旅的这一点上,我正在根据我所看到的代码来构建和解构知识。@MatthieuM.的评论帮助我我更深入地了解并意识到我以前对模式匹配的直觉是错误的,我已经及时更新了我的知识。我现在有了工作代码。我为你感到高兴!如果你有快速的问题,你可能会发现跳进锈迹斑斑的聊天室更容易:。标签通常都是可疑的,格式是更多的“讨论”而不是正式的问题/答案,因此更容易得到澄清:)