首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能借到一台输尿管呢?

我怎样才能借到一台输尿管呢?
EN

Stack Overflow用户
提问于 2015-02-19 19:59:07
回答 1查看 2.7K关注 0票数 3

我有一段我正在使用的代码,我找到了在另一个堆栈溢出问题中

代码语言:javascript
复制
fn is_palindromic(num: i64) -> bool {
    let string = num.to_string();
    let bytes = string.as_bytes();
    let iter = bytes.iter();
    let n = bytes.len() / 2;
    equals(iter.take(n), iter.rev().take(n))
}

当我最初发现它的时候,它工作得很好,但是在1/30/15和2/17/12之间的锈蚀之夜发生了一些变化,导致了这个新的错误弹出:

代码语言:javascript
复制
src/program.rs:8:26: 8:30 error: use of moved value: `iter`
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                                          ^~~~
src/program.rs:8:12: 8:16 note: `iter` moved here because it has type `core::slice::Iter<'_, u8>`, which is non-copyable
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                            ^~~~

我已经翻阅了文档,但是我似乎找不到任何可能已经改变的东西。看来,take方法现在的行为可能有所不同,但我不太确定如何解决这种情况,除非克隆bytes并使用两个单独的迭代器。

这似乎是一种解决问题的低效方法,所以我想我可能遗漏了一些东西。

什么是借用迭代器的正确方法,以便与像std::iter::order::equals**?**这样的方法一起使用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-19 20:07:57

您不需要克隆底层数据(bytes),但是您确实需要克隆迭代器:

代码语言:javascript
复制
fn is_palindromic(num: i64) -> bool {
    let string = num.to_string();
    let bytes = string.as_bytes();
    let iter = bytes.iter();
    let n = bytes.len() / 2;
    equals(iter.clone().take(n), iter.rev().take(n))
}

迭代器不是隐式的Copy-able,所以需要显式地Clone它。

这在此承诺中发生了变化,当引种

此PR还使迭代器不可隐式复制,因为这是库中细微bug的来源。您仍然可以使用克隆()来明确地复制迭代器。

另请参阅:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28615756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档