scala - scala - 如何推断返回类型
问题描述
您能否向我解释一下您是如何推断返回类型的?见下文。谢谢你。
val examples = sc.textFile(params.input).map { line =>
Vectors.dense(line.split(' ').map(_.toDouble))
}
[编辑] 我的意思是你如何推断结果类型。谢谢你。
解决方案
类型推断从后往前工作。
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类型。
推荐阅读
- angular - 这对于在构建 Angular 应用程序时通过当前时间戳或哈希码缓存静态文件很有用
- python - 如何在 heappush 时检索 heapq 中元素的位置?
- webpack - 我需要同时使用Vue2和Vue3,Webpack如何配置别名
- powershell - PowerShell 挂起 - 对键盘操作没有响应
- python - 断言 numpy dtype 为任何类型的整数
- java - 使用 fork/join 进行 Java 并发修改
- python - Django bulk_update 将所有值更改为第一次更新索引
- java - 多个 SimpleJDBCCall bean 在 Java 中导致声纳问题
- mysql - MySQL 查询仅适用于 windows,但不适用于 linux
- c# - C# Visual Studio 2019,元数字,错误:无法加载文件或程序集