我正在try 使用Rust的std::hash功能:

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

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

我得到了这个错误:

error: use of unstable library feature 'hash': module was recently redesigned

我的版本是:

rustc 1.0.0-beta (9854143cb 2015-04-02) (built 2015-04-02)

这个语法不再有效了吗?

推荐答案

最初的问题是试图使用一个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));
}

Rust相关问答推荐

将已知大小的切片合并成一个数组,

在没有引用计数或互斥锁的情况下,可以从Rust回调函数内的封闭作用域访问变量吗?

rust 蚀生命周期 行为

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

使用Py03从Rust调用Python函数时的最佳返回类型

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

应为关联类型,找到类型参数

是否可以使用Serde/Rust全局处理无效的JSON值?

期望一个具有固定大小 x 元素的数组,找到一个具有 y 元素的数组

Rust 中的静态引用

为什么这个闭包没有实现Fn?

Rust与_有何区别?

str 和 String 的 Rust 生命周期

是否可以通过可变引用推进可变切片?

为什么不可变特征的实现可以是可变的?

有没有办法通过命令获取 Rust crate 的可安装版本列表?

在运行时在 Rust 中加载字体

`use std::error::Error` 声明中断编译

如何将切片推入数组?

如果我立即等待,为什么 `tokio::spawn` 需要一个 `'static` 生命周期?