参数列表VS返回功能

时间:2015-12-22 19:35:22

标签: scala function parameters

我一直在尝试使用Scala。我试图了解implicits并遇到了这种情况。

  1. 两个函数的参数b的行为是否相同?
  2. paramareters是否只列出返回函数的语法糖?
  3. 我的实验表明,它们的行为相同。

    由于

    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
    })
    

1 个答案:

答案 0 :(得分:1)

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

在2.中,函数testC返回从IntInt的另一个函数,因此您可以使用一个参数testC(7)再次调用testC(7)(x)的结果。如果您只考虑println语句,那么这里没有什么不同。

您需要了解的是

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

不同
def testB(a: Int, b: Int)

前者表示前者代表两种功能,如第二种情况。您可以调用testB(x)并从IntInt获取另一个函数。仅应用函数的部分参数以获得另一个函数称为currying