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