我在Scala中有以下两种方法:
def myFunc: Int => String = { age =>
"Here " + age
}
def myFunc2 (age: Int) : String = {
"Here" + age
}
这两种方法有什么不同吗? (当然不是名字)。语法看起来与我完全不同。这只是风格问题吗?有人优先考虑另一个吗?
答案 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>