Rust 'Iterator<;是否有'connect()'实现;项目=Str>;`?

Rust 'Iterator<;是否有'connect()'实现;项目=Str>;`?,rust,Rust,目前,似乎是非常专门为字符串的切片或向量而设计的,尽管它任意限制了它的使用。该特定用例也反映在trait名称中,毕竟,出于某种原因,它被称为SliceConcatExt 是否有更通用的connect()实现,可以对支持Str特征的项使用任何迭代器?。 如果没有,是否有计划对此进行补救 例子 使用std::iter::IntoIterator; fn连接(s:I)->字符串 其中S:Str, I:输入迭代器{ //有 s、 插入iter().collect::().connect(“,”) //想

目前,似乎是非常专门为字符串的切片或向量而设计的,尽管它任意限制了它的使用。该特定用例也反映在trait名称中,毕竟,出于某种原因,它被称为
SliceConcatExt

是否有更通用的
connect()
实现,可以对支持Str特征的项使用任何迭代器?
。 如果没有,是否有计划对此进行补救

例子
使用std::iter::IntoIterator;
fn连接(s:I)->字符串
其中S:Str,
I:输入迭代器{
//有
s、 插入iter().collect::().connect(“,”)
//想要
//连接(“,”)
//错误:类型“::IntoIter”在名为“connect”的作用域中未实现任何方法`
//tests/lang.rs:790 s.进入_iter().connect(“,”)
}
连接(&[“foo”,“bar]”);
有人可能为任何具有项类型Str的迭代器实现
SliceConcatExt
,但我怀疑
connect()
目前只是不必要的专门化,这可能在测试版之前是可以修复的


每晚使用rustc 1.0.0(522d09dfe 2015-02-19)(2015-02-19年制造)

我所知道的最接近的解决方案是使用:

#![专题(核心)]
外部板条箱工具;
使用std::iter::IntoIterator;
使用itertools::itertools;

fn connected难道这不应该发布在锈菌追踪程序上吗?我不确定这是否是故意的,因为我总是认为我犯了完全的错误。如果我们得出结论,这更像是一个API设计问题,那么它确实应该转移到bug追踪器上。顺便说一句,如果有人真的在github上对此提出问题,请使用@Byron抄送我。谢谢,看起来它可以在
IntoIterator
中实现,是的。可能效率较低,但可实施。我鼓励你在bug追踪器中搜索这个问题,或者打开一个新的问题。我已经创建了一个新问题:啊,你让它工作了。很高兴看到我被卡在哪里了。那就行了!非常感谢。我仍然认为这是一个可用性问题,要么通过改进文档来解决,要么。。。只是让普通字符串的大小写更容易(或更明显)使用。而且,livetime的魔力不是发生在
I:IntoIterator吗
use std::iter::IntoIterator;

fn connected<S, I>(s: I) -> String
where S: Str,
      I: IntoIterator<Item=S> {
    // have
    s.into_iter().collect::<Vec<S>>().connect(", ")

    // want
    // s.into_iter().connect(", ")
    // error: type `<I as core::iter::IntoIterator>::IntoIter` does not implement any method in scope named `connect`
    // tests/lang.rs:790         s.into_iter().connect(", ")
}

connected(&["foo", "bar"]);
#![feature(core)]

extern crate itertools;

use std::iter::IntoIterator;
use itertools::Itertools;

fn connected<'a, S, I>(s: I) -> String //'
    where S: Str,
          I: IntoIterator<Item=&'a S> //'
{
    s.into_iter().map(|s| s.as_slice()).intersperse(", ").collect()
}

fn main() {
    println!("{}", connected(&["foo", "bar"]));
}