【问题标题】:scala - different ways to define a functionscala - 定义函数的不同方法
【发布时间】:2017-09-11 13:15:07
【问题描述】:

我正在尝试更好地理解 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 等列表作为reducer 的reduce 函数? //this case would output 24

实际上可能的用途和利弊是什么?

【问题讨论】:

  • 已经有很多关于这个的问题了。

标签: scala function lambda definition


【解决方案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(_ + _)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多