2016-05-17 19 views
0

我开始学习Scala和我经历了这段代码从https://github.com/sryza/aas/blob/master/ch05-kmeans/src/main/scala/com/cloudera/datascience/kmeans/RunKMeans.scala什么是Scala中的“(line:String)=> {}”结构?它是如何工作的?

def buildCategoricalAndLabelFunction(rawData: RDD[String]): (String => (String,Vector)) = { 
    ... 
    (line: String) => { 
     val buffer = line.split(',').toBuffer 
     ... 
     val label = buffer.remove(buffer.length - 1) 
     val vector = buffer.map(_.toDouble) 
     ... 
     (label, Vectors.dense(vector.toArray)) 
    } 
} 

运行什么我不明白是什么(行:字符串)=> {...}做。线路在哪里初始化?在我看来,程序正在接受来自rawData参数的输入,但我不明白这是如何发生的。

如果有人能够解释这个Scala结构被称为 - 甚至更好,它是如何工作的 - 我真的很感激它!

回答

2

它定义了一个函数,使用anonymous function syntax,这与JavaScript和其他语言中的箭头函数类似。

此语法提供了一种创建没有名称的函数的方法。这些可以通过其他函数返回,分配给变量(有效命名它们),传递给函数作为参数等。

+0

有趣的是什么可能是定义一个函数内部的匿名函数的动机,如图所示在我最初的例子?该函数是否简单地返回匿名函数而不是值? – Shuklaswag

+1

是的。查看你的方法'buildCategoricalAndLabelFunction'的名字。 –

+2

不是“而不是”一个值,函数_is_是一个值。 –

相关问题