高阶Scala函数

时间:2016-08-11 03:31:02

标签: scala

我是Scala高阶函数的新手,我对此感到困惑。 据我所知,HOF可以将函数作为

之类的参数
val c = (x:Int)=> x + 3

这里意味着它采用Int类型的一个参数并返回Int。

但是我无法理解下面的代码,因为它将函数作为Int =>类型的参数。 Int但意味着它接受一个参数并返回Int,但在实现它时,它们发送一个带有两个Int args的函数。

    def calculate(f: Int => Int, a: Int, b: Int) =
  if (b != 0) f(a, b) else throw Exception("Divide by 0")

def divide(a: Int, b: Int) = a / b

calculate(divide, 2, 0) // => Exception
calculate(divide, 4, 2) // => 2

有人可以帮助我理解这一点。 我很感激,如果有人可以分享一些代码链接,我可以更多地了解HOF。

1 个答案:

答案 0 :(得分:1)

def divide(a: Int, b: Int): Int = a / b

divide是一个函数(实际上是一种方法),需要2 Int s并返回1 Int。它也可以这样写。

val divide = (a:Int, b:Int) => a/b

在这种情况下,它是一个实际的函数,但方法和函数之间的区别不需要在这里关注。

def calculate(f: (Int, Int) => Int, a: Int, b: Int): Int = ...

calculate采取3个论点。第一个f是一个函数,它需要2 Int s并返回1 Int。 (注意正确的签名。)

calculate(divide, 77, 7)

calculate作为第一个参数调用dividecalculate代码divide内部被引用(重命名)为f并被调用。所以f(a, b)确实是divide(77, 7)