【发布时间】:2021-02-24 15:41:38
【问题描述】:
编辑
从建议的解决方案看来,我想要实现的目标似乎是不可能的/不是正确的方法,因此 - 我将在这里解释最终目标:
我正在使用 serde 从 YAML 文件中解析 Foo 的值,我想让用户一次从 yaml 中获取其中一个存储值,这就是为什么我想在我的结构中存储一个迭代器
我有两个类似于以下的结构:
struct Bar {
name: String,
id: u32
}
struct Foo {
my_map: HashMap<String, Bar>
}
在我的Foo 结构中,我希望将一个迭代器存储到我的 HashMap 中,以便用户可以根据需要从我的映射中借用值。
从理论上讲,完整的 Foo 类看起来像:
struct Foo {
my_map: HashMap<String, Bar>,
my_map_iter: HashMap<String, Bar>::iterator
}
impl Foo {
fn get_pair(&self) -> Option<(String, Bar)> {
// impl...
}
}
但无论我尝试什么,我似乎都无法完成并创建这样一个变量(各种编译错误,似乎我只是试图做错)。
如果有人能指出实现这一目标的正确方法,以及是否有更好的方法来实现我正在尝试做的事情,我会很高兴 - 我想知道这一点。
谢谢!
【问题讨论】:
-
我也不确定它本身是否有意义:“用户可以按需从我的地图中借用值”一旦迭代器用完会发生什么?
-
@Masklinn 我最初的意图是创建一个新的迭代器并重新开始 - 我使用 serde 解析来自 YAML 的值,并希望让类的用户按需使用这些值
-
我撤回了我的重复投票,因为您现在正在寻找特定的解决方法。但是,您能否阐明所需的模式?为什么你的
Foo类不能提供一个迭代器供用户在闲暇时使用? -
@kmdreko 在我的实际用例中,Bar 是一个服务器配置,稍后我需要在代码中的其他位置使用它来尝试连接到该服务器。我的 YAML 文件包含许多这样的设置,有时我想使用一个新设置。我的 Foo 结构是我解析 YAML 并将其存储以供以后使用的地方。 YAML 不是太大,所以我也可以将它全部保存在内存中。