У меня возникают проблемы при попытке понять правила сопоставления с образцом в Rust. Первоначально я думал, что идея шаблонов состоит в том, чтобы соответствовать левой и правой сторонам так:
struct S {
x: i32,
y: (i32, i32)
}
let S { x: a, y: (b, c) } = S { x: 1, y: (2, 3) };
// `a` matches `1`, `(b, c)` matches `(2, 3)`
Однако, когда мы хотим привязать ссылку кзначение справа, нам нужно использовать ключевое слово ref
.
let &(ref a, ref b) = &(3, 4);
Это выглядит довольно непоследовательным.
Почему мы не можем использовать оператор разыменования *
чтобы подобрать левую и правую стороны следующим образом?
let &(*a, *b) = &(3, 4);
// `*a` matches `3`, `*b` matches `4`
Почему шаблоны в Rust не работают так? Есть ли причина, по которой это не так, или я что-то не так понял?