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类型。
你能解释一下你是如何推断出 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类型。