我试图更好地理解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
实际上可能的用法和优点是什么?缺点
答案 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(_ + _)