Ниже приведен пример Rust Deref из http://doc.rust-lang.org/book/deref-coercions.html, за исключением того, что я добавил другое утверждение.
Мой вопрос: почему assert_eq с deref также равен 'a'? Оборотная сторона этого вопроса: зачем мне *
после того, как я вручную вызвал deref
?
use std::ops::Deref;
struct DerefExample<T> {
value: T,
}
impl<T> Deref for DerefExample<T> {
type Target = T;
fn deref(&self) -> &T {
&self.value
}
}
fn main() {
let x = DerefExample { value: 'a' };
assert_eq!('a', *x.deref()); // this is true
// assert_eq!('a', x.deref()); // this is a compile error
assert_eq!('a', *x); // this is also true
println!("ok");
}