0

我有一个结构,其中包含一个用于格式化日期的字符串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 的签名newfn new(format: &'a str) -> Self消除错误,但现在 a 的创建者DateThingy必须确保格式字符串存在足够长的时间并且与生命周期有关。我只想DateThingy拥有它需要的所有信息,而不依赖于引用或生命周期。

我该如何做到这一点?

的创建DateThingy不是性能关键,所以我很乐意克隆字符串、分配、存储它们等,如果有帮助的话。

4

0 回答 0