首页 > 解决方案 > 比较 Cell 内部引用的非复制枚举

问题描述

我在这里有一个复制项目:https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=08e0f111394174b76ab788f784918dca下面也是代码。

我在匹配 aEnum内部时遇到问题Cell,而枚举不是Copy,因为它的一个字段是 a String。输入是对 a 的引用Cell(在我的“真实”代码中,为了演示我的问题,我也在示例代码中将其作为引用)。

我不想使用 a RefCell,因为它可能会崩溃,并且我不想在每次尝试匹配Enum整个项目时都进行错误处理。

我尝试了一个match表达式,试图搜索一个get方法,但这仅适用CopyCell. 我不在乎某个clone方法是否在某处被调用。

use std::cell::Cell;

#[derive(PartialEq, Clone)]
enum SoftDrink {
    Cola,
    Unknown(String)
}

fn main() {
    assert_eq!(true, is_cola(&Cell::new(SoftDrink::Cola)));
    assert_eq!(false, is_cola(&Cell::new(SoftDrink::Unknown("Fanta".to_owned()))));
}

fn is_cola(drink: &Cell<SoftDrink>) -> bool {
    // ??
}

标签: rust

解决方案


推荐阅读