我正在尝试从 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
,而&
仅生成对该内部值的引用。