【发布时间】:2017-03-18 16:55:54
【问题描述】:
我正在尝试创建一个HashMap,其中包含特定输入的已知值。这个输入可以接受多种类型,只要它们实现了某个特征。然而,在这种情况下,只给出了一个特定的类型,这是 Rust 不喜欢的。
有没有办法将结构“转换”为特征,或者解决这个问题?
#![allow(unused)]
use std::collections::HashMap;
use std::hash::*;
trait Element: Eq + PartialEq + Hash {}
trait Reaction<T: Element> {}
#[derive(Eq, Hash, PartialEq)]
struct Ion {
charge: u16
}
impl Element for Ion {}
#[derive(Eq, Hash, PartialEq)]
struct RedoxReaction<T: Element> { left: T }
impl<T: Element> Reaction<T> for RedoxReaction<T> {}
fn get_sep_database<T: Element>() -> HashMap<RedoxReaction<T>, f32> {
let mut map: HashMap<RedoxReaction<T>, f32> = HashMap::new();
let reaction = RedoxReaction {
left: Ion {
charge: 1
}
};
// note: expected type `RedoxReaction<T>`
// found type `RedoxReaction<Ion>`
map.insert(reaction, 0.000 as f32);
return map;
}
fn main() {
let db = get_sep_database();
let reaction = RedoxReaction {
left: Ion {
charge: 1
}
};
// expected this to be 0.000
let sep = db.get(&reaction);
}
【问题讨论】: