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!