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),您需要传入一个函数。 (注意:f1f2 方法 而不是 函数 ,但是您可以使用η-膨胀.)

看起来像这样:

f1(1, 2, f2 _)
//=> 3: Int

但是,请注意结果是 3 而不是 12,因为 f1 完全忽略了它的第三个参数。它实际上并没有对 f2 做任何事情,它只是 returns x + y 并丢弃了第三个参数。

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