我正在学习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"
,它会正确地排除"s"
(此处使用is_empty
打印):
<o>(false) <m>(false) <e>(false) <>(true)
那么迭代器中的切片表现出了不同的行为?
为什么会这样,或者我哪里错了?