如何在不克隆的情况下使用模式匹配在 Rc<Enum::Variant(f64)> 中获取对 f64 值的引用?
How can I use a pattern match to get a reference to an f64 value inside an Rc<Enum::Variant(f64)> without cloning?
我正在尝试从 Ref.
中获取值
Ref
包含一个枚举 (FeelValue),它有一个包含 f64
的变体 (Number)。 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
,而 &
只是生成对该内部值的引用。
我正在尝试从 Ref.
中获取值Ref
包含一个枚举 (FeelValue),它有一个包含 f64
的变体 (Number)。 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
,而 &
只是生成对该内部值的引用。