最初的问题是试图使用一个unstable的特性——这意味着它不允许在稳定的版本中使用,比如1.0-beta或1.0.自它们出现以来,该函数已从语言中删除.
替换方法是编写自己的版本,它允许您指定哈希函数.此外,不推荐直接使用SipHasher
.如果你需要一个特定的散列算法,你应该从 crate 中取出它.伊奥.否则,可以使用标准库中未指定的哈希算法:
use std::hash::{Hash, Hasher};
use std::collections::hash_map::DefaultHasher;
#[derive(Hash)]
struct Person {
id: u32,
name: String,
phone: u64,
}
fn my_hash<T>(obj: T) -> u64
where
T: Hash,
{
let mut hasher = DefaultHasher::new();
obj.hash(&mut hasher);
hasher.finish()
}
fn main() {
let person1 = Person {
id: 5,
name: "Janet".to_string(),
phone: 555_666_7777,
};
let person2 = Person {
id: 5,
name: "Bob".to_string(),
phone: 555_666_7777,
};
println!("{}", my_hash(person1));
println!("{}", my_hash(person2));
}