我有一个结构,其中包含一个用于格式化日期的字符串chrono::DateTime.format()
:
struct DateThingy {
format: String,
}
impl DateThingy {
fn new(format: String) -> Self {
Self { format }
}
}
这有点浪费,因为每次格式化日期时都必须解析格式字符串。为了提高效率,我想我应该解析一次格式字符串并存储结果。然后我可以使用格式化chrono::DateTime::format_with_items
:
use chrono::format::strftime::StrftimeItems;
use chrono::format::Item;
struct DateThingy<'a> {
items: Vec<Item<'a>>,
}
impl<'a> DateThingy<'a> {
fn new(format: String) -> Self {
Self {
items: StrftimeItems::new(&format).collect(),
}
}
}
这不起作用:
error[E0515]: cannot return value referencing function parameter `format`
--> src/lib.rs:10:9
|
10 | / Self {
11 | | items: StrftimeItems::new(&format).collect(),
| | ------- `format` is borrowed here
12 | | }
| |_________^ returns a value referencing data owned by the current function
我可以更改 to 的签名new
以fn new(format: &'a str) -> Self
消除错误,但现在 a 的创建者DateThingy
必须确保格式字符串存在足够长的时间并且与生命周期有关。我只想DateThingy
拥有它需要的所有信息,而不依赖于引用或生命周期。
我该如何做到这一点?
的创建DateThingy
不是性能关键,所以我很乐意克隆字符串、分配、存储它们等,如果有帮助的话。