rust - 比较 Ref 和 PartialEq 的内容
问题描述
假设我有两个Ref<T>
对象T
implements 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>`
解决方案
std::cell::Ref
implements 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());
}
(游乐场链接)
推荐阅读
- php - 我在 url 中看不到“on”
- javascript - 如何在浏览器扩展中加载页面之前执行 js 文件?
- jquery - jQuery .attr 函数不返回所有属性值
- css - 如何以 9:16 的纵横比计算 div 的宽度和高度
- flutter - 我想在不使用抽屉的情况下导航到主屏幕
- yocto - 从 Yocto 构建文件中提取特定的可执行文件
- laravel - Is there any way to show post from permalink in laravel?
- azure-data-explorer - How to efficiently filter Azure (kusto) container logs
- python-3.x - How to run a shell script as source using python to set environment variables?
- php - 访问 URL 时为 foreach() 提供的参数无效