scala - 定义函数的不同方法

时间:2017-04-15 11:54:10

标签: scala function lambda definition

我试图更好地理解Scala语法和编写代码的不同方法,有些情况对我来说不太清楚lambda或函数定义/调用是如何工作的。

例如,可以通过多种方式声明具有相同结果的相同函数:

def foo: (Double,Double) => Double = (x,y) => x*y
  //> foo: => (Double#1671, Double#1671) => Double#1671
def foo = (x: Double,y : Double) => x*y
 //> foo: => (Double#1671, Double#1671) => Double#1671
def foo(x: Double, y: Double) = {(x * y) }
 //> foo: (x#722938: Double#1671, y#722939: Double#1671)Double#1671

可以以相同的方式调用所有版本并产生相同的结果:    println(foo1(4,2))// 8.0

我想将此foo函数用作将用于在列表中操作的reducer。

如何实现减少像list(1,2,3,4,...)foo这样的列表用户作为减速器的功能? //this case would output 24

实际上可能的用法和优点是什么?缺点

1 个答案:

答案 0 :(得分:-1)

正如您所提到的,我们可以通过多种方式在Scala中实现foo。事实上它也可以写在下面:

val s = (x: Double, y: Double) => x*y

要将foo实现为reducer,它可以用以下方式编写:

def foo(x: List[Int]) = x.reduce(_ + _)

或者

val s = (x: List[Int]) => x.reduce(_ + _)