Scala:在单行代码中调用一个纯函数,该函数具有另一个纯函数作为参数(HOF)
Scala: Call a pure function that has another pure function as parameter (HOF) in a one-liner
这是我的代码:
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
做任何事情,它只是 returns x + y
并丢弃了第三个参数。
如果您想对作为第三个参数传递的函数执行某些操作,则需要调用它。
这是我的代码:
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
做任何事情,它只是 returns x + y
并丢弃了第三个参数。
如果您想对作为第三个参数传递的函数执行某些操作,则需要调用它。