是否有可能克隆`skip_while`?

时间:2016-04-02 20:07:22

标签: rust

std::iter::SkipWhile有一个Clone实现,但当我尝试在其上调用clone()时,我得到:

let a = [-1i32, 0, 1];
let mut iter = a.into_iter().skip_while(|x| x.is_negative()).clone();
  

方法clone存在,但不满足以下特征限制:[closure@<anon>:3:45: 3:64] : core::clone::Clone

Playground

1 个答案:

答案 0 :(得分:2)

问题是闭包没有实现Clone。这是Rust中的一个已知问题:#23501

如果我们使用普通函数而不是闭包怎么办?毕竟,你的关闭并没有捕获任何东西。

fn main() {
    fn is_negative(x: &&i32) -> bool {
        x.is_negative()
    }

    let a = [-1i32, 0, 1];

    let mut iter = a.into_iter().skip_while(is_negative).clone();

    assert_eq!(iter.next(), Some(&0));
    assert_eq!(iter.next(), Some(&1));
    assert_eq!(iter.next(), None);
}

不幸的是,这不起作用,因为函数也没有实现Clone(尽管它们实现了Copy!)。这也是一个已知问题:#24000#28229