Chr*_*gan 11
你描述的这种功能通常应该通常采用IntoIterator<Item = T>; 因此可以同时接受Iterator<T>和Vec<T>作为输入.
这也可以与其他技术结合使用; 例如,此方法concat将接受&[&str](并因此&Vec<&str>通过自动deref/ref强制),&[String](因此&Vec<String>),&str迭代器,String迭代器等等:
use std::borrow::Borrow;
fn concat<T: Borrow<str>, Iter: IntoIterator<Item = T>>(iter: Iter) -> String {
iter.into_iter() // -> impl Iterator<Item = T>
.map(|s| s.borrow()) // -> impl Iterator<Item = &str>
.collect() // -> String
}
Run Code Online (Sandbox Code Playgroud)
(这个具体的例子实际上通常更适合SliceConcatExt,因为它能够计算最终结果预先存在多长时间,从而一次性分配正确的长度字符串.但它只是概念的证明以及多种花式技术可以合并.)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |