我是Scala的新手,想知道以下
之间的区别define testFunc(par1: String) = { }
define testFunc(par1: String)(par2: String) = {}
define testFunc(par1: String)(implicit par2: String) = {}
答案 0 :(得分:2)
def testFunc(par1: String) = { }
以String
为唯一参数的函数(实际上是一种方法)。
def testFunc(par1: String)(par2: String) = {}
一个函数(方法),它接受两个类型为String
的参数。参数为curried。
Currying很有意思。如果你有一个带有两个curried参数的函数,并且你只使用第一个参数调用该函数,那么你得到的是一个带有另一个参数的新函数。
def testFunc(par1: String)(implicit par2: String) = {}
与上一个相同但如果在调用函数时未提供第二个参数,则编译器将查看已声明String
的{{1}}是否可用。如果只有一个隐式字符串在范围内,那么它将用作第二个参数。
请注意,这会更改函数的curried方面,因为如果未找到或提供隐式,则会出错。你没有像以前那样得到新功能。