如何在不克隆的情况下使用模式匹配来获取对 Rc<Enum::Variant(f64)> 中 f64 值的引用?



我正在尝试从 Ref 中获取值。

Ref包含一个枚举(FeelValue),该枚举具有包含f64的变体(数字)。FeelValue不是Copy,我不想克隆它。我只想获取对 f64 值的引用,以便我可以对其进行比较。

这是不起作用的:


pub enum FeelValue {
Number(f64),
Boolean(bool),
String(String),

// ... many other variants
Null
}
let a: std::cell::Ref<FeelValue> = ...;
let b: std::cell::Ref<FeelValue> = ...;
match (a,b) {
(FeelValue::Number(a_number), FeelValue::Number(b_number)) => FeelValue::Boolean(a_number < b_number),
_ => FeelValue::Null 
} 

我不能做match (*a, *b)因为FeelValue不是Copy。我可以克隆,但我不想克隆。(这是排序例程的核心,它已经必须克隆所有内容一次。

如何从Ref<FeelValue::Number>中获取 f64 值?

如果您好奇我为什么要使用Ref,它来自对Rc<RefCell<Vec<T>>>中一个值的引用。

你可以做match (&*a, &*b)

*Ref<T>取消引用为内部值T,而&仅生成对该内部值的引用。

相关内容

最新更新