1)隐式转换函数必须在有效的作用域范围内才能生效
【例8-10】隐式函数作用域范围示例。
第3~8行代码定义了包implicitConversion,在该包定义了一个单例对象ImplicitConve⁃rsion,将所有相关的隐式转换函数放在ImplicitConversion中,如此它便可以在程序的任何地方使用,使用时将其引入到相应的作用域即可,第11行代码演示了使用方式。隐式转换函数的这种使用方式十分普遍,例如Scala语言在默认情况下会自动引入Predef对象中所有的方法,这里面包含了大量的隐式转换函数,在Scala REPL命令行中输入:implicits-v命令可以得到如下内容:
Scala通过这种方式将所有的隐式函数引入到当前作用域,只不过编译器默认已经自动进行了引入。
2)当方法中参数的类型与实际类型不一致时,编译器会尝试进行隐式转换。(www.daowen.com)
上面的代码函数输入参数类型是Int类型,而调用时指定的类型是Double类型,编译器发现类型不匹配,此时编译器会尝试在当前作用域范围内查找一个输入类型是Double、返回值类型是Int类型的隐式转换函数,如果有,则进行隐式转换,转换后再调用目标函数,如果没找到这样的隐式转换函数,则报错。
3)当调用类中不存在的方法或成员时,会自动将对象进行隐式转换。
当对象调用了某个类中不存在的方法时,编译器会在当前作用域内尝试进行隐式转换,如例8-1中的Person类并没有fly方法,但之所以能够顺利执行是因为编译器会自动将查找相应的隐式转换函数或隐式类,将Person类转换成SuperMan,最终调用SuperMan中的fly方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。