如何解决什么是正确的数据类型,以使函数能够在Rust的迭代器之间复制,并且功能尽可能广泛?
我通常需要在两个可迭代对象之间复制数据。除了special case of slices之外,我在标准库中找不到合适的函数,因此我尝试编写自己的函数:
fn copy(source: /* ? */,target: /* ? */) {
for (s,t) in source.zip(target) {
*t = s.clone();
}
}
什么是正确的数据类型选择,以使此功能尽可能通用?
解决方法
s.clone()
似乎没有什么用,因为它限制了您输入可输入的项目。调用者可以只使用cloned()
或copied()
来调整迭代器。
唯一真正必要的约束条件是您可以将源项目分配给目标项目。
我想看起来像
fn copy<S,SI,T,TI>(source: S,target: T)
where
S: Iterator<Item = SI>,T: Iterator<Item = TI>,TI: DerefMut<Target = SI>,{
for (s,mut t) in source.zip(target) {
*t = s;
}
}
但是坦率地说,在极少数情况下,我需要做这样的事情,我宁愿只写命令式循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。