簡體   English   中英

Scala 的奇怪行為

[英]Strange behavior of Scala

你們中的任何人都可以解釋為什么會這樣嗎?

val s = "abcdefg"

val slides = s.sliding(4)
val n1 = slides.length
val n2 = slides.dropWhile(foo).length

println(n1) // 4
println(n2) // 0
println(slides.length) // 0

但:

val s = "abcdefg"

println(s.sliding(4).length) // 4
println(s.sliding(4).dropWhile(foo).length) // 3
println(s.sliding(4).length) // 4

不要關注 function “foo”,這是一種檢查字符串是否不包含字母“c”的簡單方法。

不幸的是,我不理解這種編程語言的行為。 也許有更多知識的人可以回答為什么會這樣。

slides是一個迭代器 它是一種特殊的“集合”,您只能遍歷一次。

一旦你要求它的長度,它必須掃描(並丟棄)它的所有元素,計算它們,所以,它變成空的,當你再次詢問它的長度時( dropWhile在這里無關緊要),它是 0。

這在您需要處理一個巨大的集合而不是一次將其全部加載到 memory 的情況下很有用(例如,逐行讀取一個巨大的文件,以查看它是否在某處包含單詞“google”)。

sliding返回一個迭代器,因為讓它可遍歷不止一次可能很昂貴,但很少需要。 如果您需要多次遍歷它,請執行val slides = s.sliding(4).toSeq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM