我正在学习 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());
}
Run Code Online (Sandbox Code Playgroud)
但结果如下:
<s> <o> <m> <e> <>
Run Code Online (Sandbox Code Playgroud)
我的想法是:Split由split实现返回的结构Iterator提供skip_while. IntelliSense 告诉我xin 闭包是 type ,&&str所以我假设迭代器( type &str)的所有元素都是空的被省略。
但它不会跳过空子字符串。
我还尝试打印is_empty函数的结果。它表明最后一个切片确实是空的。如果我改为使用 skip_while skip_while(|&x| x == "s"),它会正确地省略"s"(在is_empty此处打印):
<o>(false) <m>(false) <e>(false) <>(true)
Run Code Online (Sandbox Code Playgroud)
那么切片在迭代器中的行为不同吗?
为什么会这样或者我在哪里弄错了?