设计意图
一个字符串分割器
pub struct StrSplit<'h, 'd> {reminder: Option<&'h str>,delimiliter: &'d str,}#[allow(dead_code)]impl<'h, 'd> StrSplit<'h, 'd> {pub fn new(s: &'h str, delimiliter: &'d str) -> Self {StrSplit {reminder: Some(s),delimiliter,}}}impl<'h, 'd> Iterator for StrSplit<'h, 'd> {type Item = &'h str;fn next(&mut self) -> Option<Self::Item> {let reminder = self.reminder.as_mut()?;if let Some(b) = reminder.find(self.delimiliter) {let util = &reminder[..b];*reminder = &reminder[b + self.delimiliter.len()..];Some(util)} else {self.reminder.take()}}}#[allow(dead_code)]fn until_char<'a>(s: &'a str, c: char) -> &'a str {let de = format!("{}", c);StrSplit::new(s, &de).next().expect("not found")}
结构体 StrSplit包含两个生命周期,’h ‘d 其中h和被切割的str生命周期一致。而在迭代器中迭代器返回的Item同样是h生命周期。因此直接用传入的str构建item迭代项。
until中传入短生命周期的de也没关系
