问一个Scala的语法问题!!!!!!

问题描述

看用Scalding写的MapReduce程序时,看到有这么个函数定义:defflatMap[A,T](fs:(Fields,Fields))(fn:A=>TraversableOnce[T])(implicitconv:TupleConverter[A],setter:TupleSetter[T]):Pipe={conv.assertArityMatches(fs._1)setter.assertArityMatches(fs._2)each(fs)(newFlatMapFunction[A,T](fn,_,conv,setter))}调用的时候是这样:flatMap('line->'word){lineA:String=>tokenize(lineA)}//tokenize(是一个函数,不用考虑)我就不明白了:函数定义的明明是3层括号,也就像是3层柯里化似的,但是调用函数的时候,为什么用一个()和一个{}就搞定了呢??而且lineA:String=>tokenize(lineA)这句是什么意思?!如果是传入一个匿名函数作为参数,也应该是加小括号啊:(lineA:String)=>tokenize(lineA)

解决方案

本帖最后由 cymvp 于 2015-04-16 23:27:10 编辑
解决方案二:
没人回答么?这里应该都是scala的高手啊!
解决方案三:
没人知道么??我加分了!!!!!!
解决方案四:

解决方案五:

解决方案六:
没人回答么?这里应该都是scala的高手啊
解决方案七:
我看不懂小学生飘过
解决方案八:
第一个参数是pair第二个参数是function,调用时{}用来代替具体的函数第三个参数是implicit,上下文中有implicit的引用就可以省略这个参数
解决方案九:
不要以命令式编程语言(c/c++)来理解它,学习它,就要按照它的思考方式函数式lineA:String=>tokenize(lineA)意思是String类型的变量lineA,把他传入函数tokenize人家这个语言就是这种写法,为啥一定要是命令式语言的写法(lineA:String)=>tokenize(lineA)
解决方案十:
'line->'word传给了fs:(Fields,Fields)lineA:String=>tokenize(lineA)传给了(fn:A=>TraversableOnce[T])implicitconv:TupleConverter[A],setter:TupleSetter[T]这个不用传,只要上下文中有implicit定义就行在scala中如果调用函数只有一个参数,调用时可以使用{}来替代()这里用了柯里化,(fn:A=>TraversableOnce[T])小括号中只有一个参数,所以在调用时可以使用{}代替()比如下面的例子objectTest{deff(a:Int)={a}defmain(args:Array[String]){vala=f{15}//这里用{}代替()println(a)}}

时间: 2024-08-01 19:14:16

问一个Scala的语法问题!!!!!!的相关文章

python-初学Python,问一个关于数组取值的问题

问题描述 初学Python,问一个关于数组取值的问题 定义了一个tuple,初始化: name=('ada','bob','jack') 为什么取数组值的时候会报错? name(1) 解决方案 认真点,虽然你定义的不是list,是tuple,但是取值的时候还是要用name[1],而不是name(1). 解决方案二: 定义是定义,但是取值,有自己的语法规范name[1].不需要跟他爸爸长一样的.( )

Scala基本语法和概念

本文主要包括Scala的安装过程并理解Scala的基本语法和概念,包括表达式.变量.基本类型.函数.流程控制等相关内容. 1. 安装 从All Versions Scala下载所需版本Scala安装包,解压到指定目录之后,配置环境变量并使其生效. 如果你使用Mac,则可以使用brew安装: ⇒ brew install scala 在终端键入scala查看Scala的版本,并进入Scala的解释器: ⇒ scala Welcome to Scala version 2.11.6 (Java Ho

新人问一个有关c语言的问题

问题描述 新人问一个有关c语言的问题 输入num名学生的成绩并计算平均数 请问我的代码哪错了?我看了好久不知道怎么改 #include #include #define n 40 float Average(int a[],int n); void Readscore(int a[],int n); int main() { int a[n]; float aver,num; printf("人数:"); scanf("%d", &num); Readsco

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

逻辑训练-问一个逻辑问题,关于离散数学的

问题描述 问一个逻辑问题,关于离散数学的 本人信息安全专业最近学到离散数学讲到一个蕴含关系想问问大家一个思维问题就图里画线部分.p 蕴含q 在日常生活中可以变成类似于只有 q才 p 这个要怎么理解它?利用集合来理解可以吗 解决方案 离散数学不太清楚了,就理解的话,应该可以使用集合来理解,p蕴含q,说明q是p的组成要素,如人是由各种器官组成的,比如心脏,只有心脏存在,才能存在人.也就是说q是p的必要不充分条件. 解决方案二: 离散数学不太清楚了,就理解的话,应该可以使用集合来理解,p蕴含q,说明q

代码-问一个win32application中,我创建了对话框,

问题描述 问一个win32application中,我创建了对话框, 在对话框中我拖进去编辑框控件,问题是如何使用编辑框,得到输进去的数字求求各位高手了,最好有具体代码,感激不尽!!! 解决方案 用GetDlgItem获取编辑框窗口句柄,用GetWindowText获取编辑框内容,用atoi等函数将字符串转换成整数或者用 GetDlgItemInt 解决方案二: 直接用GetDlgItemInt就可以了.不需要什么"G?e?t?DlgItem获取到控件,然后GetWindowText获取控件文本

pyqt-求问一个PyQt的问题,退出时候内存错误

问题描述 求问一个PyQt的问题,退出时候内存错误 1C 写了一个pyqt的程序,有多个tab页,其中一个tab页是通过matplotlib画图,当这个模块存在时,整个程序在退出的时候就会出现exit code -1073741819,这个是出现了内存错误.但是当我去掉这个模块时,程序不会出现这个问题.而且当我把其他的tab页注释掉,仅仅只有这模块的时候,也不会出问题.这说明,这应该是这个模块与其他的某个模块导致了问题. 于是我一个模块一个模块的注释,想找到到底哪个模块与这个画图的模块同时会导致

安卓-没有代码,我单纯的想问一个关于二维码的问题

问题描述 没有代码,我单纯的想问一个关于二维码的问题 就是说,我在视频上学会了在安卓手机上如何扫描二维码,但是我尝试着扫描一些广告的二维码,他返回的数据就是一个网址,但是我现在要实现的功能是: 每个学生都有自己的二维码,上面有他们的信息,我要制作一个扫二维码的功能来实现对他们二维码的扫描,然后将该学生的信息显示到手机上面,请问这个应该怎么实现呀,我应该再在程序里面加什么呢 解决方案 看你二维码里面是什么,如果是学员ID,你可以扫完之后去学校的学生系统里面去根据id去得到这个用户的信息,不知道对不

变量-问一个我自己都觉得低端的问题,有关js页面的,忘记怎么个原理了

问题描述 问一个我自己都觉得低端的问题,有关js页面的,忘记怎么个原理了 就是我在配置文件properties中定义了多个不同 key-value,然后页面上就用到了这个变量的key取到了value的值,搞不明白是怎么回事了,各位,帮解答一下吧 解决方案 你是用了插件吧. js通过ajax读取properties文件文本内容,回调函数中接收文件内容(即整个文件内容是一个大字符串),再对这个字符串做转换处理,最终转换为js对象 转换逻辑:根据换行符来拆分成数组(一行一个键值对),再对每一行数据根据