我想了解flatten
方法有什麼樣的魔法。下面是一個示例表格this articleGenericTraversableTemplate :: flatten。它做什麼樣的魔術?
def toInt(s: String): Option[Int] = {
try {
Some(Integer.parseInt(s.trim))
} catch {
// catch Exception to catch null 's'
case e: Exception => None
}
}
scala> val strings = Seq("1", "2", "foo", "3", "bar")
strings: Seq[java.lang.String] = List(1, 2, foo, 3, bar)
scala> strings.map(toInt)
res0: Seq[Option[Int]] = List(Some(1), Some(2), None, Some(3), None)
scala> val flattenResult = mapResult.flatten
flattenResult: Seq[Int] = List(1, 2, 3)
哇。它看起來像是一個奇蹟。 flatten
方法如何知道我們不應該將None
添加到結果集合中。這不是明顯的形式實現其在所有:
def flatten[B](implicit asTraversable: A => /*<:<!!!*/ GenTraversableOnce[B]): CC[B] = {
val b = genericBuilder[B]
for (xs <- sequential)
b ++= asTraversable(xs).seq
b.result()
}
不能你解釋它的意義......我的意思是什麼呢,一般做什麼?也許它知道,None
是一個monadic值並使用它的一些「monadic」方法。但這只是一個猜測。
我唯一的改正是's/it's/its /'。另外,我不確定什麼是顯而易見的。另一個答案也顯示了代碼,這也不明顯。它一直不明顯。 –
@ som-snytt,謝謝,糾正它。 –
非常有趣。我無法想象這是一個隱含的轉換。 – user3663882