首页 > 解决方案 > Rust 函数中的值所有权

问题描述

我有以下功能:

fn hmac_sha1<'a>(_message: &'a str, _key: &'a str) -> &'a [u8] {
    let key: &[u8] = _key.as_bytes();
    let message: &[u8] = _message.as_bytes();

    let mut mac: Hmac<Sha1> = Hmac::new(Sha1::new(), key);
    mac.input(message);

    let mac_result: MacResult = mac.result();

    mac_result.code()
}

本质上,我想使用 SHA1 对我的消息进行编码,并返回一个指向结果字节数组的指针。编译此代码时,出现以下错误。

  --> src/main.rs:81:5
   |
81 |     mac_result.code()
   |     ----------^^^^^^^
   |     |
   |     returns a value referencing data owned by the current function
   |     `mac_result` is borrowed here

现在,我明白这里出了什么问题,我只是不知道如何解决它。一旦函数完成,变量的mac_result生命周期就会到期,指向其内部结果的指针当然不会再存在了。

有没有办法延长mac_result变量的生命周期,以便我可以返回它包含的字节数组,而无需将其转换为Vec<u8>? 这是一个可行的解决方案,但如果可能的话,我宁愿不转换数组。

标签: rustlifetimeborrowing

解决方案


推荐阅读