scala - 如何推断 return 类型

scala - how to infer the return type

你能解释一下你是如何推断出 return 类型的吗?见下文。谢谢你。

   val examples = sc.textFile(params.input).map { line =>
          Vectors.dense(line.split(' ').map(_.toDouble))
        }

[编辑] 我的意思是你如何推断​​结果类型。谢谢你。

将其转换为 DenseVector 以推断正确的 return 类型

import org.apache.spark.mllib.linalg.{DenseVector, Vectors}
import org.apache.spark.rdd.RDD

val examples: RDD[DenseVector] = sc.textFile(file).map { line =>
        Vectors.dense(line.split(' ').map(_.toDouble)).toDense
}

类型推断从后向前工作。

sc.textFile(file).map { line => Vectors.dense(line.split(' ').map(_.toDouble)) }

在您的主表达式中调用的最后一个方法是 RDD.map(lambda),即 return 是一个 RDD[whatever the lambda returns]

Vectors.dense(line.split(' ').map(_.toDouble))

那么lambda main表达式最后调用的方法是Vectors.dense(doubles),即return是一个Vector.

line.split(' ').map(_.toDouble)

最后这一行没有关系,因为 Vector 没有类型参数,所以没有什么可推断的。

因此,如果将所有内容放在一起,return 类型为 RDD[Vector]。

表达式的类型是其最后一段代码求值的类型。如果它是一个带有类型参数的方法,在本例中 RDD.map[B],则类型参数 B 是从用于绑定该参数的表达式中推断出来的。

为什么要从后退到前进?举个例子。

def method[T](value:T) = {    
  val a = value    
  val b = a    
  val c = b    
  c 
}

method("Foo")

method("Foo") return是一个String,因为,从后往前=> c的类型,即b类型,即a类型,即value类型,即T类型,最后T是String类型。