首页 文章

高阶Scala函数

提问于
浏览
-1

我是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 回答

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

    divide 是一个函数(实际上是一个方法),需要2 Int 并返回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 并返回1 Int 的函数 . (注意正确的签名 . )

    calculate(divide, 77, 7)
    

    使用 divide 作为其第一个参数调用 calculate . 在 calculate 代码中 divide 被引用(重命名)为 f 并被调用 . 所以 f(a, b) 真的是 divide(77, 7) .

相关问题