首页 > 解决方案 > scala - 如何推断返回类型

问题描述

您能否向我解释一下您是如何推断返回类型的?见下文。谢谢你。

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

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

标签: scalatypesreturntype-inference

解决方案


类型推断从后往前工作。

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

主表达式中调用的最后一个方法是RDD.map(lambda),它返回一个RDD[whatever the lambda returns].

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

然后,在 lambda 主表达式中调用的最后一个方法是Vectors.dense(doubles),它返回一个Vector

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

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

所以,如果放在一起,返回类型是 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")返回一个String,因为从后往前=>类型c,即b类型,即a类型,即value类型,即T类型,最后T是String类型。


推荐阅读