【发布时间】:2022-12-18 01:28:25
【问题描述】:
我是 Rust 的新手。
我的任务是创建将 Iterator<&str>、Iterator<String>、Iterator<io::Result<String>> 转换为 Iterator<MyRecord> 的函数,以便逐行流式读取大文本文件并使用简单的 vec!["...","..."] 对其进行测试
经过几个小时的脑雾我解决了它,但它不是很漂亮......
-
虽然
io::Result<String>没有共同特征AsRef<str>,但我定义了自己的特征StringRef,并针对&str、String和io::Result<String>实现了它 -
我为自己的迭代器创建结构:
struct ReaderIterator<'a,S:StringRef> { lines: Box<dyn Iterator<Item=S> + 'a>, }并在其上实施
Iterator<MyRecord>。一切正常。任务完成。
但我仍然对这段代码不满意。
-
Box- 可能应该更好AsRef -
dyn XXX- 我会更好<'a,S:StringRef, I> where I:Iterator...我尝试将其替换为:
struct ReaderIterator<'a,S:StringRef> { lines: AsRef<dyn Iterator<Item=S> + 'a>, }不工作-
error[E0782]: trait objects must include thedynkeyword再试一次
struct ReaderIterator<'a,S:StringRef> { lines: dyn AsRef<dyn Iterator<Item=S> + 'a>, }不工作 -
expected trait objectdyn AsRef, found structBox`,而 Box 的 AsRef 特征在哪里......tryes 泛化迭代器:
struct ReaderIterator<'a,S:StringRef, I> where I:Iterator<Item = S> { lines: Box<I + 'a>, }不工作-
not a traitstruct ReaderIterator<'a,S:StringRef, I> where I:Iterator<Item = S> + 'a { lines: I, }灾难性的
unused parameter a,,unused parameter S- 如果我在哪里使用它们,为什么它们没有被使用???请谁能解释 - 如何正确概括实体一些(作为参考)对某些 (I) 迭代器的引用,该迭代器迭代某些 (S) StringRef 特征 ???
代替盒子在某些 (S) 字符串引用上引用某些迭代器
真的卡住了……
-
【问题讨论】:
-
不要使用
S,只需将I作为通用名称,并在 impl 中引用I::Item: StringRef。