именно почему именно вызывает deref при передачи параметра в функцию, а может вызваться что-то еще?
она вызывается при разыменовании указателя, а не передачи в функцию
Разменивания указателя - это оператор "*", но я в коде этого не делаю.
взятии указателя, прошу прощения
А как он понимает, что нужно взять указатель именно числа, а не структуры?
Потому что в функции test() написано v:&i32, а не &Test
он не понимает. он у структуры, на которую берут указатель, вызывает deref
Все верно, но в функцию передается test(&Test), а не test(&122)
Да, всё верно, идет неявный вызов и компилятор по факту за меня дописывает: Test.deref
If T implements Deref<Target = U>, and x is a value of type T, then: In immutable contexts, *x (where T is neither a reference nor a raw pointer) is equivalent to *Deref::deref(&x). Values of type &T are coerced to values of type &U T implicitly implements all the (immutable) methods of the type U. Вторая строчка: значения типа &T (у нас &Test) преобразуются в &U (у нас &i32)
Да, спасибо. Я читал доку, более менее я разобрался как работает Deref, но как бы так сказать, я прошу, может кто знает, где есть материалы, где более подробно рассказывают о таких вещах, как неявный вызов + трейты
https://stackoverflow.com/questions/28519997/what-are-rusts-exact-auto-dereferencing-rules Там в ответах ещё есть ссылки на сорцы
ох, ёпрст, спасибо. Пойду разбираться!
Обсуждают сегодня