Scala:调用一个纯函数,该纯函数在一个线性函数中有另一个纯函数作为参数(HOF)

Scala:调用一个纯函数,该纯函数在一个线性函数中有另一个纯函数作为参数(HOF),scala,user-defined-functions,higher-order-functions,Scala,User Defined Functions,Higher Order Functions,这是我的代码: def f1(x: Int, y: Int, f2: Int => Int): Int = { x + y } def f2(z: Int): Int = { z*z } 我想用一行程序调用函数,但没有成功。我尝试了以下方法: f1(1,2, f2(3)) val f2Res = f2(3) f1(1, 2, f2Res) 我期望得到以下结果:f1(1,2,f2(3)=3+9=12,但我得到以下错误消息: type mismatch;

这是我的代码:

  def f1(x: Int, y: Int, f2: Int => Int): Int = {
    x + y
  }
  def f2(z: Int): Int = {
    z*z
  }
我想用一行程序调用函数,但没有成功。我尝试了以下方法:

f1(1,2, f2(3))

val f2Res = f2(3)
f1(1, 2, f2Res)
我期望得到以下结果:f1(1,2,f2(3)=3+9=12,但我得到以下错误消息:

type mismatch;
 found   : Int
 required: Int => Int
    f1(1,2, f2(3))

我不明白我做错了什么,我不明白什么。

错误信息实际上非常清楚:
f1
的第三个参数应该是一个函数,但你在传递一个数字。
f2(3)
不是一个函数,它是数字
9

您需要传入函数,而不是
f2(3)
。(注意:
f1
f2
是方法而不是函数,但是您可以使用η-展开轻松地将方法转换为函数。)

它看起来像这样:

f1(1,2,f2)
//=>3:Int
但是,请注意,结果是
3
,而不是
12
,因为
f1
完全忽略了它的第三个参数。它实际上不处理
f2
,它只返回
x+y
,并丢弃第三个参数


如果您想对作为第三个参数传递的函数执行某些操作,则需要调用它。

f2(3)不是一个函数是一个值,试着用<代码> F2< /代码>,请看一看语言的任何介绍教程。谢谢你的回答!我已经读过很多材料了,你能给我指点一下我应该看的更具体的主题吗?它是HOF还是别的什么?@ BialGuoLT考虑Scala练习。关键是要理解产生值的函数应用程序
f(42)
的概念与函数本身作为值的概念之间的区别。谢谢你的建议,Mario!