我是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 回答
divide
是一个函数(实际上是一个方法),需要2Int
并返回1Int
. 它也可以这样写 .在这种情况下,它是一个实际的功能,但方法和功能之间的区别不需要在这里关注我们 .
calculate
采取3个论点 . 第一个f
是一个需要2Int
并返回1Int
的函数 . (注意正确的签名 . )使用
divide
作为其第一个参数调用calculate
. 在calculate
代码中divide
被引用(重命名)为f
并被调用 . 所以f(a, b)
真的是divide(77, 7)
.