高阶Scala函数

高阶Scala函数,scala,Scala,我是Scala高阶函数的新手,对此我有点困惑。 据我所知,HOF可以将函数作为参数,如 val c = (x:Int)=> x + 3 这里的意思是它接受一个Int类型的参数并返回Int 但我无法理解下面的代码,因为它将函数作为Int=>Int类型的参数,但这意味着它接受一个参数并返回Int,但在实现这一点时,它们发送了一个接受两个Int参数的函数 def calculate(f: Int => Int, a: Int, b: Int) = if (b != 0) f(

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

val c = (x:Int)=> x + 3
这里的意思是它接受一个Int类型的参数并返回Int

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

    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
有人能帮我理解这一点吗。 我很感激如果有人能分享一些代码链接,我可以了解更多关于霍夫

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 = ...
计算
取3个参数。第一个函数为
f
,它接受2个
Int
s并返回1个
Int
。(请注意正确的签名。)


调用
calculate
,第一个参数为
divide
。在
calculate
code
divide
中,被引用(重命名)为
f
,并被调用。所以
f(a,b)
实际上是
divide(77,7)

这甚至没有编译。
val c=(x:Int)=>x+3
不是高阶函数。Thnx@jwvh用于解释,所以如果
def calculate(f:Int=>Int,a:Int,b:Int)=
,我们可以发送任何只取一个整数并返回Int的函数,只有当我们有
def calculate(f:(Int,Int)=>Int,a:Int,b:Int)
时,我们才能发送一个带有两个参数的函数。但是,我们不能在
def calculate(f:Int=>Int,a:Int,b:Int)=
中发送带有两个参数的函数,因为它只接受带有一个参数的函数。我希望我理解正确。
calculate(divide, 77, 7)