Scala隐式转换和隐式参数
来源:互联网 发布:大数据在社保行业应用 编辑:程序博客网 时间:2024/05/20 01:35
隐式转换和隐式参数
Scala在面对编译出现类型错误时,提供了一个由编译器自我修复的机制,编译器试图去寻找一个隐式implicit的转换方法,转换出正确的类型,完成编译
优点使代码简洁,但可读性差
val num: Int = 3.5 // Compile Error// 如果在上面加一个隐式转换方法之后,就没问题了implicit def double2Int(d: Double) = d.toIntval 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把隐式转换导入。简单来说,隐式代码应该可以被”直接”使用,不能再依赖类路径。
假如我们把隐式转换定义在源类型或者目标类型的伴生对象内,则我们可以跳过单一标示符的规则。因为编译器在编译期间会自动搜索源类型和目标类型的伴生对象,以尝试找到合适的隐式转换。
- 一次编译只隐式转换一次(One-at-a-time Rule)
参考
- implicit conversions and parameters
- implicits intro
- Scala中的Implicit详解
- Scala 隐式转换
阅读全文
0 0
- scala 隐式转换参数
- scala中的隐式转换、隐式参数和隐式类
- scala中的隐式转换、隐式参数和隐式类
- Scala隐式转换和隐式参数
- Scala隐式转换和隐式参数
- Scala--隐式参数
- scala-隐式转换
- scala 隐式转换
- Scala隐式转换
- Scala隐式转换
- scala隐式转换
- scala隐式转换
- scala 隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- Scala--隐式转换
- Scala vs Java
- TP5 layui 自定义模板
- Scala基本语法
- h5选择结构
- 嵌套盒元素子元素margin-top影响父元素
- Scala隐式转换和隐式参数
- 机器学习技法-Linear Support Vector Machine
- NYOJ 860 又见01背包
- varargin和arargout用法
- 在suse Linux环境下搭建ES集群
- 用排列组合的方式实现输入三个数据从大到小输出数据
- LRU算法java数据结构实现
- 如何用html 写八卦
- 枚举类型