我阅读了一个项目的源代码,发现:
val sampleMBR = inputMBR.map(_._2).sampleinputMBR是一个元组。
函数map的定义是:
map[U classTag](f:T=>U):RDD[U]看起来map(_._2)是map(x => (x._2))的缩写。
谁能告诉我这些速记的规则?
发布于 2015-03-25 10:38:28
_语法可能有点混乱。当_单独使用时,它表示匿名函数中的一个参数。因此,如果我们处理成对:map(_._2 + _._2)将是map(x, y => x._2 + y._2)的简写。当_用作函数名(或值名)的一部分时,它没有特殊含义。在本例中,x._2返回元组的第二个元素(假设x是一个元组)。
发布于 2015-03-25 10:59:19
collection.map(_._2)发出元组的第二个组件。来自纯Scala的示例(Spark RDDs的工作方式相同):
scala> val zipped = (1 to 10).zip('a' to 'j')
zipped: scala.collection.immutable.IndexedSeq[(Int, Char)] = Vector((1,a), (2,b), (3,c), (4,d), (5,e), (6,f), (7,g), (8,h), (9,i), (10,j))
scala> val justLetters = zipped.map(_._2)
justLetters: scala.collection.immutable.IndexedSeq[Char] = Vector(a, b, c, d, e, f, g, h, i, j)发布于 2015-03-25 13:42:03
“_._2”中的两个下划线不同。
第一个'_‘是匿名函数的占位符;第二个'_2’是case类Tuple的成员。
类似于:
案例类Tuple3 (_1:T1,_2:T2,_3:T3) {...}
https://stackoverflow.com/questions/29246440
复制相似问题