Scala中函数的不同语法

时间:2016-07-10 03:25:14

标签: scala

我在Scala中有以下两种方法:

def myFunc: Int => String = { age =>
  "Here " + age
}

def myFunc2 (age: Int) : String = {
  "Here" + age
}

这两种方法有什么不同吗? (当然不是名字)。语法看起来与我完全不同。这只是风格问题吗?有人优先考虑另一个吗?

1 个答案:

答案 0 :(得分:3)

是的,有区别。前者是一个不带参数并返回类型Function1[Int, String]的函数的方法。后者是一种采用String并返回Int的方法。

在Scala中,可以声明和调用arity-0的方法而不用括号,因此调用myFunction(1)myFunction2(1)看起来是一样的。

如果我们将方法转换为函数,您会看到前者采用Function0[Function1[Int, String]]形状的区别,而后者将是Function1[Int, String]

myFunc: Int => String
myFunc2: (age: Int)String

scala> myFunc _
res6: () => Int => String = <function0>

scala> myFunc2 _
res7: Int => String = <function1>