首页 > 解决方案 > 比较 Ref 和 PartialEq 的内容

问题描述

假设我有两个Ref<T>对象Timplements PartialEq,我该如何比较它们?

以下代码无法编译:

use std::cell::RefCell;

fn main() {
    let a = RefCell::new("abcdef".to_string()).borrow();
    let b = RefCell::new("abcdef".to_string()).borrow();
    println!("{}", a == b);
}

并导致此错误:

error[E0369]: binary operation `==` cannot be applied to type `std::cell::Ref<'_, std::string::String>`
 --> src/main.rs:6:22
  |
6 |     println!("{}", a == b);
  |                    - ^^ - std::cell::Ref<'_, std::string::String>
  |                    |
  |                    std::cell::Ref<'_, std::string::String>
  |
  = note: an implementation of `std::cmp::PartialEq` might be missing for `std::cell::Ref<'_, std::string::String>`

标签: rust

解决方案


std::cell::Refimplements std::ops::Deref,您需要使用它来使用*运算符获取值本身。用你的片段,你想做

use std::cell::RefCell;

fn main() {
    let a = RefCell::new("abcdef".to_string());
    let b = RefCell::new("abcdef".to_string());

    println!("{}", *a.borrow() == *b.borrow());
}

游乐场链接


推荐阅读