2
我被這種表達猝不及防:語義startsWith對陣列
val words = strings.map(s => s.split(「,」)) // split CSV data
val nonHashWords = words.filter(word => word.startsWith(「#」))
這種結構是錯誤的,因爲words
是Seq[Array[String]]
代替intented Seq[String]
。 我沒想到Array會有一個startsWith
方法,所以我花了一些時間來理解它的語義。我自然希望這是真的:Array(「hello」, 「world」).startsWith(「hello」)
這裏是我的探索會話的其餘部分:
scala> val s = Array("hello","world")
s: Array[String] = Array(hello, world)
scala> s.startsWith("hello")
res0: Boolean = false
scala> s.startsWith("h")
res1: Boolean = false
scala> val s = Array("hello","hworld")
s: Array[String] = Array(hello, hworld)
scala> s.startsWith("h")
res3: Boolean = false
scala> s.startsWith("hworld")
res4: Boolean = false
scala> s.toString
res5: String = [Ljava.lang.String;@11ed068
scala> s.startsWith("[L")
res6: Boolean = false
scala> s.startsWith("[")
res7: Boolean = false
什麼是「array.startsWith」的預期行爲?
有趣的疑難雜症! –