小编aus*_*day的帖子

为什么断言Deref :: deref的结果因类型不匹配而失败?

以下是Rust编程语言中Deref示例,除了我添加了另一个断言.

为什么assert_eqderef平等'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)

pointers rust

12
推荐指数
1
解决办法
1195
查看次数

标签 统计

pointers ×1

rust ×1