Если что-то работает, но вы думаете, что не должно работать в настоящий момент, это может быть связано с одним из следующих.
Преобразования - ослабляет типы для соответствия сигнатуре, например, &mut T
к &T
, преобразования типов.
Разименования - разыменование x: T
до \*
x, \*\*x
, … совместимы с некоторыми назначениями S
.
Прелюдия - автоматический импорт основных элементов, например, Option
, drop()
,…
Одолжение - поскольку x: &mut T
не может быть скопировано, перемещает в новый &mut \*x
.
Время жизни - позволяет записать f(x: &T)
вместо f<'a>(x: &'a T)
для краткости.
Разрешения метода - разыменовывает или заимствует х до тех пор, пока не сработает x.f()
.
Сопоставления шаблонов - многократно отменяет проверку и добавляет к привязкам ref
и ref mut
.
Статическое повышение R-value - делает ссылки на статические константы, например, &42
, &None
, &mut \[\]
.
Двойные определения - определение одного (например, структуры S(u8)
) неявно определяет другое (например, fn S
).
Примечание: эти особенности облегчают вашу жизнь, используя Rust, но мешают ее усвоению. Если вы хотите развить подлинное понимание, потратьте дополнительное время на их изучение.