参数列表和返回函数

Parameter list VS returned function

我一直在尝试使用 Scala。我试图理解隐式并遇到这种情况。

  1. 两个函数的参数 b 的行为是否相同?
  2. 参数列表是否只是返回函数的语法糖?

我的实验表明,它们的行为相同。

谢谢

implicit val v = 2

// 1.
def testB(a: Int)(b: Int)(implicit i: Int): Int = {
  println(a + b + i)
  11
}
println(testB(7)(8))
println(testB(7) {
  8
})

// 2.
def testC(a: Int): (Int) => Int = {
  def innerTest2C(b: Int)(implicit i: Int) = {
    println(a + b + i)
    11
  }
  innerTest2C
}

println(testC(7)(8))
println(testC(7) {
  8
})

规则是只要一个函数只接受一个参数,您就可以用花括号 {} 替换普通括号 ()。大括号定义一个块,并允许您在其中放置多个语句。与所有块一样,该块将计算最后一行中表达式的值。

在2.中,函数testC returns是从IntInt的另一个函数,所以你不能用一个参数再次调用testC(7)的结果:testC(7)(x)。如果你只考虑 println 语句,这里没有什么不同。

你需要明白的是

def testB(a: Int)(b: Int)

不同于

def testB(a: Int, b: Int)

就前者代表两个函数而言,就像您的第二种情况一样。您可以调用 testB(x) 并将获得从 IntInt 的另一个函数。仅应用函数的部分参数以获得另一个函数称为 currying.