Scala用迭代剂的谓词下降



我有疑问,即用迭代器使用scala的滴定谓词。在这里,我有一个简单的迭代器创建:

scala> val it = Iterator("a" , "number" , "of" , "words")
it: Iterator[String] = non-empty iterator

接下来,我在上面使用滴定谓词:

scala> it dropWhile ( _.length < 2 )
res52: Iterator[String] = non-empty iterator

接下来,我在迭代器上执行下一个命令:

   scala> it next
   res53: String = of

现在注意到迭代器的下一个命令返回",一个超过了它应该是的。

如果我将相同的代码放在主函数中,则下一个将返回" A"。这很令人困惑。有人可以解释一下吗?

来自文档:

特别重要的是要注意,除非另有说明,否则 调用方法后,切勿使用迭代器。他们俩 最重要的例外也是唯一的抽象方法:下一个和 hasnext。

您需要将dropWhile的结果分配给新变量,然后继续使用该变量。

val remaining  = it dropWhile ( _.length < 2 )
remaining.next

scala docs将 Iterators解释为

An iterator is not a collection, but rather a way to access the elements of a collection one by one. The two basic operations on an iterator it are next and hasNext. A call to it.next() will return the next element of the iterator and advance the state of the iterator. Calling next again on the same iterator will then yield the element one beyond the one returned previously. If there are no more elements to return, a call to next will throw a NoSuchElementException.

repl

,当您在repl中应用it dropWhile ( _.length < 2 )时,将其分配给res52

scala> it dropWhile ( _.length < 2 ) res52: Iterator[String] = non-empty iterator

"a" , "number"已经访问。因此,应用it next给了您of,它是 100%正确

MAIN

main()中,您必须完成

val it = Iterator("a" , "number" , "of" , "words")
it dropWhile ( _.length < 2 )
print(it next)

您可以清楚地看到it dropWhile ( _.length < 2 )未分配为REPT中的分配。因此, "a" , "number"尚未访问

SO it next main()印刷a

我希望解释有用

相关内容

  • 没有找到相关文章

最新更新