以下是Rust编程语言中的Deref示例,除了我添加了另一个断言.
为什么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");
}
Run Code Online (Sandbox Code Playgroud)
如果我取消注释该行,我会收到此错误:
error[E0308]: mismatched …Run Code Online (Sandbox Code Playgroud)