Scala隐式转换和隐式参数
2017-11-15 18:46
337 查看
隐式转换和隐式参数
Scala在面对编译出现类型错误时,提供了一个由编译器自我修复的机制,编译器试图去寻找一个隐式implicit的转换方法,转换出正确的类型,完成编译优点使代码简洁,但可读性差
val num: Int = 3.5 // Compile Error // 如果在上面加一个隐式转换方法之后,就没问题了 implicit def double2Int(d: Double) = d.toInt val num: Int = 3.5 // 这段代码会被编译成 val num: Int = double2Int(3.5)
主要两种功能
实现变量类型的转换,叫隐式转换
补充curring函数的调用列表,叫隐式参数
语法
声明隐式转换函数
// implicit def 方法名(x: 类型) = 转换之后的类型 implicit def intToString(x: Int) = x.toString
遵守原则
一次编译只隐式转换一次(One-at-a-time Rule)
Scala不会把 x + y 转换成 convert1(convert2(x)) + y
在作用域范围内单一标识符
单一标示符是说当隐式转换作用时应该是这样的形式:file2Array(arg).map(fn)的形式,而不是foo.file2Array(arg).map的形式。假设file2Array函数定义在foo对象中,我们应该通过import foo._或者import foo.file2Array把隐式转换导入。简单来说,隐式代码应该可以被”直接”使用,不能再依赖类路径。
假如我们把隐式转换定义在源类型或者目标类型的伴生对象内,则我们可以跳过单一标示符的规则。因为编译器在编译期间会自动搜索源类型和目标类型的伴生对象,以尝试找到合适的隐式转换。
参考
implicit conversions and parametersimplicits intro
Scala中的Implicit详解
Scala 隐式转换
相关文章推荐
- Scala--隐式转换和隐式参数
- Scala学习之路 (八)Scala的隐式转换和隐式参数
- scala有多个隐式转换或隐式参数匹配的是后会发生什么,我很好奇,试验了一把
- Scala 隐式转换 隐式参数
- Scala中的隐式转换、隐式参数、隐式类
- 【scala 笔记(9)】 隐式转换 和 隐式参数-- implicit
- Scala入门到精通——第十九节 隐式转换与隐式参数(二)
- 一步步学spark之一scala高级特性中隐式转换,隐式参数,隐式类3.8
- Scala高级特性 匿名函数 柯里化 隐式转换 隐式参数【Scala 3】
- Scala泛型、隐式转换和隐式参数、视图介绍、Scala中的上界、下界、结合柯里化进行隐式转换
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
- scala学习之:隐式转换与隐式参数
- Scala学习—隐式转换与隐式参数
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- scala中的隐式转换与隐式参数
- Scala中的Implicit(隐式转换,隐式参数,隐式类)
- Scala入门到精通——第十九节 隐式转换与隐式参数(二)
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- scala总结(4) -- 隐式转换以及隐式参数
- scala中的隐式转换、隐式参数和隐式类