Сравните содержимое Ref с PartialEq - PullRequest
0 голосов
/ 27 сентября 2019

Если у меня есть два Ref<T> объекта, где T реализует 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>`

1 Ответ

3 голосов
/ 27 сентября 2019

std::cell::Ref реализует 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());
}

( Playground Link )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...