scala中的case中的变量为啥没有定义

例子如下:

  def topTermsInTopConcepts(svd: SingularValueDecomposition[RowMatrix, Matrix], 
    numConcepts: Int,
    numTerms: Int, 
    termIds: Array[String]):   //这三行是输入的参数类型
   Seq[Seq[(String, Double)]] = //这一行是返回的变量类型
   {
    val v = svd.V//这里是kxn矩阵
    val topTerms = new ArrayBuffer[Seq[(String, Double)]]()
    val arr = v.toArray
    for (i <- 0 until numConcepts)
    {
      val offs = i * v.numRows
      val termWeights = arr.slice(offs, offs + v.numRows).zipWithIndex
      //这里的意思是(i·v.numRows,(i+1)·v.numRows)
      val sorted = termWeights.sortBy(-_._1)//减去某个元素的第一个成员
      topTerms += sorted.take(numTerms).map{case (score, id) => (termIds(id), score) }


  }
  topTerms//最终返回(id,score)的组合
}

我们会发现,这份代码的score和id都没有进行定义就直接拿来用了。

 这里的score和id称为“模式变量”,是对前面的结果进行模式匹配的,所以不需要进行定义,也有资料称为“占位符”

猜你喜欢

转载自blog.csdn.net/appleyuchi/article/details/88408857