rust - 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>
? 这是一个可行的解决方案,但如果可能的话,我宁愿不转换数组。
解决方案
推荐阅读
- matlab - 如何使用向量确定跳数?
- c# - 如何在 Fluent API 设计中创建 Find.Elements.By.Name(string name)?
- javascript - 如何使用 Semantic-UI 中的占位符元素?
- ionic-framework - 无需订阅即可检测网络连接
- uninstallation - 从 ubuntu 18.04 中完全删除 edb-debugger
- heroku - 设置 Heroku 配置变量时在“&”附近解析错误
- python - 无法将base64图像从csv转换为Python中的文件
- angular - 如何显示已经选择的 Angular Component mat-chip?
- java - 按需唤醒睡眠线程
- javascript - 博客中的观察者订阅模式