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
答案 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。