Rust函数的价值所有权

时间:2019-05-02 14:05:09

标签: rust lifetime borrowing

我具有以下功能:

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>?那是一个可行的解决方案,但是我宁愿不转换数组。

0 个答案:

没有答案