码迷,mamicode.com
首页 > 其他好文 > 详细

15、Scala隐式转换和隐式参数

时间:2018-09-02 02:03:40      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:缩小   实现   两种   分享   隐式   情况下   标识符   变量   入参   

1、隐式转换

2、使用隐式转换加强现有类型

3、隐式转换函数的作用域与导入

4、隐式转换发生时机

5、隐式参数

1、隐式转换

  要实现隐式转换,只要程序可见的范围内定义隐式转换函数即可。Scala会自动使用隐式转换函数。隐式转换函数与普通函数唯一的语法区别是以implicit开头,而且一定要定义函数返回类型。特殊售票窗口:

  技术分享图片

2、使用隐式转换加强现有类型

  隐式转换可以在不知不觉中加强现有类型的功能,就是说,可以为某个类定义一个加强版的类,并定义互相之间的隐式转换,从而让源类在使用加强版的方法时,由scala自动进行隐式转换为加强类,然后调用该方法。超人变身:

  技术分享图片

3、隐式转换函数的作用域与导入

  scala默认使用两种隐式转换,一种是源类型,着这目标类型的伴生对象内的隐式转换函数;一种是当前程序作用域内的可以用唯一标识符表示的隐式转换函数。

  如果隐式转换函数不在上述两种情况下的话,必须手动使用import语法引入某个包下的隐式转换函数,比如importtest._。通常建议,仅仅在需要进行隐式转换的地方,比如某个函数或者方法内,用iimport导入隐式转换函数,这样可以缩小隐式转换函数的作用域,避免不需要的隐式转换。

4、隐式转换发生时机

  1、调用某个函数,但是给函数传入的参数的类型,与函数定义的接受参数类型不匹配。

  2、使用某个类型的对象,调用某个方法,而这个方法并不存在与该类型时。

  3、使用某个类型的对象,调用某个方法,虽然该类型有这个方法,但是给方法传入的参数类型,与方法定义的接受参数的类型不匹配。

  技术分享图片

5、隐式参数

  隐式参数,指在函数或者方法中,定义一个用implicit修饰的参数,scala会尝试找到一个指定类型的,用implicit修饰的对象,即隐式值,并注入参数。

  scala会在两个范围内查找,一种是当前作用域可见的val或var定义的隐式变量,一种是隐式参数类型的伴生对象内的隐式值。

  技术分享图片

15、Scala隐式转换和隐式参数

标签:缩小   实现   两种   分享   隐式   情况下   标识符   变量   入参   

原文地址:https://www.cnblogs.com/haisongvip/p/9572027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!