use crate::List::{Cons, Nil};
#[derive(Debug)]
struct Foo {}
#[derive(Debug)]
enum List {
Cons(i32, Foo),
Nil,
}
impl List {
fn tail(&self) -> Option<&Foo> {
match self {
Cons(_, item) => Some(item), // why `item` is of type `&Foo`?
Nil => None,
}
}
}
Как указано в комментарии, почему item
имеет тип &Foo
? Какое правило гласит, что item
будет иметь тип &Foo
, а не Foo
?
Я понимаю, что для элемента не имеет смысла быть Foo
; &self
говорит, что self
является ссылкой, поэтому нет смысла перемещать значение из ссылки, но есть ли какие-либо спецификации, которые четко определяют правила?