除隐式转换函数、隐式类外,Scala语言中还存在隐式参数和隐式值,隐式参数在定义函数时通过implict关键字指定,隐式值的定义与一般变量的定义类似,只不过需要在最前面加个关键字implicit,具体使用如例8-3所示。
【例8-3】隐式参数与隐式值。
例8-3第3行代码给出了隐式参数的使用,该行代码定义了一个函数sum,函数参数为隐式参数,通过implicit关键字指定,需要注意的是,implict关键字的作用域是整个函数参数列表,也就是说参数x、y都为隐式参数。第6行代码定义的是一个隐式值,该变量的作用是当使用函数sum时不传递任何参数,编译器会自动查找到该隐式值作为函数的参数。第10行代码能够顺利执行正是这个原因,由于函数sum没有指定参数,编译器便会查找对应类型的隐式值,在本例中是隐式值x、y作为函数sum的两个参数,即第10行代码的sum调用方式相当于调用sum(x=5,y=5)。
隐式参数在实际开发中非常常见,但隐式参数的使用有几个值得注意的地方。
1)implicit关键字在函数参数中只能出现一次。
2)implicit关键字的作用域是整个函数参数。(www.daowen.com)
def sum(implicit x:Int,y:Int)=x+y中的implicit关键字使得x、y都为隐式参数,如果只指定一个隐式参数,函数需要柯里化。
因为implicit关键字在函数参数中只能出现一次,所以下面的代码也是非法的:
另外,还需要注意的是柯里化后的函数implict关键字只能放在最后一个柯里化函数参数中,例如:
3)匿名函数不能使用隐式参数。
4)如果函数带有隐式参数,则不能使用其部分应用函数(Partial Applied Function)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。