rust - 提供带有生命周期的惰性静态引用
问题描述
是否可以提供带有生命周期参数的惰性静态?
use lazy_static::lazy_static; //lazy_static = "1.4.0"
enum MyEnum<'a>{
Name(&'a str)
}
lazy_static! {
static ref STATIC_ENUM: Mutex<MyEnum<'a>> = Mutex::new(MyEnum::Name("some name"));
}
给出:
error[E0261]: use of undeclared lifetime name `'a`
static ref STATIC_ENUM: Mutex<MyEnum<'a>> = Mutex::new(MyEnum::Name("some name"));
^^ undeclared lifetime
解决方案
是的,但是您可以用于任何 static
变量(惰性或非惰性)值的唯一生命周期是'static
生命周期。
lazy_static! {
static ref STATIC_ENUM: Mutex<MyEnum<'static>> = Mutex::new(MyEnum::Name("some name"));
}
如果您想输入&str
不是文字(或故意泄露)的内容,这可能会出现问题。如果您需要这样做,可能您根本不应该使用引用,而是使用 own String
,此时您的枚举不再需要生命周期参数:
enum MyEnum {
Name(String),
}
另外,考虑使用once_cell::sync::Lazy
而不是lazy_static::lazy_static
. 它不会在这里给你任何特别的优势,但它不使用宏,因此它不会隐藏诸如static
.
推荐阅读
- jenkins - 当构建队列被取消时,有没有办法发送电子邮件?
- karate - 标记或值放在带有额外括号的 var 中
- typescript - 带有任意数量参数的函数,后跟 TypeScript 中的回调
- python - 无法正确地将 pandas 索引转换为日期时间
- powershell - Invoke-RestMethod : 通用传入 webhook 接收到错误的有效负载
- sql-server - MSSQL 2012 - 在表格、数据透视表中逐小时跟踪零件编号?
- javascript - html表单内的模态
- reactjs - 如何更新事件的 useCallback 挂钩
- git - 一切都是最新的,但承诺不为空
- css - Angular 8+ 的高级@import 样式