【发布时间】:2017-12-03 20:07:19
【问题描述】:
运行以下代码将导致编译器抱怨PairedNumbers::get 返回(char, char) 而不是(&char, &char):
use std::iter::{Zip, Cycle, Skip};
use std::str::Chars;
struct PairedNumbers<'a> {
char_pairs: Zip<Cycle<Chars<'a>>, Skip<Cycle<Chars<'a>>>>,
counter: usize,
}
impl<'a, 'b: 'a> PairedNumbers<'a> {
fn new(num_str: &'b str, jump: usize) -> PairedNumbers<'a> {
PairedNumbers {
char_pairs: num_str.chars().cycle().zip(num_str.chars().cycle().skip(jump)),
counter: 0,
}
}
fn get(&'a mut self) -> (&'a char, &'a char) {
self.counter = self.counter + 1;
self.char_pairs.next().expect("could not get char pair from unparsed_pairs!")
}
}
我们看到PairedNumbers 结构是通过在字符串切片的字符上创建迭代器(具体来说是Chars)来初始化的。鉴于&str 是对特定内存区域的引用(我假设是一个连续区域?),Chars 不会真的迭代对构成str 的组件chars 的引用? Rust 的自动解除引用在这里起作用了吗?
【问题讨论】:
标签: rust