调用接受函数作为参数的函数

时间:2014-12-28 15:29:52

标签: scala

下面的工作表代码定义了两个函数。 fun接受类型为Int => Int的函数参数并调用该函数 参数值为2

funParam接受Int参数并返回此参数+ 3。

这是一个人为的例子,因此可以直观了解函数的传递方式 在编写功能代码时。

object question {
  println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet

    def fun(f : Int => Int) = {
        f(2)
    }                                         //> fun: (f: Int => Int)Int

    def funParam(param : Int) : Int = {
        param + 3
    }                                         //> funParam: (param: Int)Int

    fun(funParam)                             //> res0: Int = 5

}

为什么我不能使用以下内容:fun(funParam(3)) 这会导致编译器错误:type mismatch; found : Int required: Int => Int

这是否意味着我无法调用功能"有趣"将变量传递给funParam? 这是我尝试使用fun(funParam(3))尝试实现的,也许有一种实现这个目的的方法?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以使用:

val res = fun(_ => funParam(3))
println(res) // 6

您无法将Int类型的值(调用funParam(3)的结果)传递给fun哪个参数类型为Int => Int({{1} }})。

答案 1 :(得分:0)

  

为什么我不能使用类似:fun(funParam(3))这会导致编译器   error : type mismatch; found : Int required: Int => Int

因为funParam(3)评估为Int类型的,但fun采用Int => Int类型的函数