如何使用std::hash::hash?

如何使用std::hash::hash?,hash,rust,Hash,Rust,我正在尝试使用Rust的std::hash函数: use std::hash::{hash, Hash, SipHasher}; #[test] fn hash_test() { println!("{}", hash::<_, SipHasher>(&"hello")); } 我的版本是: rustc 1.0.0-beta(9854143cb 2015-04-02)(2015-04-02建成) 这个语法不再有效吗?最初的问题是试图使用一个不稳定的功能,这意味着

我正在尝试使用Rust的
std::hash
函数:

use std::hash::{hash, Hash, SipHasher};

#[test]
fn hash_test() {
    println!("{}", hash::<_, SipHasher>(&"hello"));
}
我的版本是:

rustc 1.0.0-beta(9854143cb 2015-04-02)(2015-04-02建成)

这个语法不再有效吗?

最初的问题是试图使用一个不稳定的功能,这意味着它不允许在稳定的版本中使用,如1.0-beta或1.0。自它们出现以来,该函数已从语言中删除

替换方法是编写您自己的版本,它允许您指定哈希函数。此外,不推荐直接使用
SipHasher
。如果您需要一个特定的哈希算法,您应该从crates.io中提取它。否则,可以使用标准库中未指定的哈希算法:

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));
}
使用std::hash::{hash,Hasher};
使用std::collections::hash_map::DefaultHasher;
#[导出(散列)]
结构人{
id:u32,
名称:String,
电话:u64,
}
fn my_hash(obj:T)->u64
哪里
T:散列,
{
让mut hasher=DefaultHasher::new();
对象散列(&mut散列器);
hasher.finish()
}
fn main(){
让person1=人{
id:5,
名称:“Janet”。to_string(),
电话:555_666_7777,
};
让person2=人{
id:5,
名称:“Bob”。to_string(),
电话:555_666_7777,
};
println!(“{}”,my_hash(person1));
println!(“{}”,my_hash(person2));
}

这完全奏效了。谢谢你知道核心团队是否计划让std::hash::hash稳定到1.0吗?我很困惑,因为文档在这里列出了这个稳定的特性:@DorkRawk Stability比这个更细粒度-模块是稳定的,但是。不幸的是,我不知道这种方法是否会稳定下来。这是一种特殊的用例——无论如何,大多数人都不想直接获取哈希代码。你的用例是什么?