【发布时间】:2020-12-01 08:19:06
【问题描述】:
我在学习 Rust 发现了这个问题:
我想用一个模式分割一个字符串,并删除结果子字符串为空的所有情况。
这是一个例子:
let s = "s,o,m,e,";
for elem in s.split(",").skip_while(|&x| x.is_empty()) {
print!(" <{}> ", elem);
//print!(" <{}>({}) ", elem, elem.is_empty());
}
但结果如下:
<s> <o> <m> <e> <>
我的想法是:split 返回的结构体Split 实现了Iterator,它提供了skip_while。 IntelliSense 告诉我闭包中的x 是&&str 类型,所以我假设迭代器的所有元素(&str 类型)都是空的,可以省略。
但它不会跳过空子字符串。
我还尝试打印is_empty 函数的结果。它表明最后一个切片确实是空的。如果我改为使用skip_while(|&x| x == "s") 代替skip_while,它正确地省略了"s"(此处用is_empty 打印):
<o>(false) <m>(false) <e>(false) <>(true)
所以切片在迭代器中的行为会有所不同?
为什么会这样或者我哪里弄错了?
【问题讨论】: