scala 隐式类
来源:互联网 发布:肯尼迪双柱 做丝数据 编辑:程序博客网 时间:2024/06/04 20:08
Implict Classes
本文简单介绍了scala2.10的新特性,隐式类。你只需要在合适的类前面加上implict关键字,即可使得在该隐式类作用域内,可以在该类的主构造器内完成一些隐式转换。
用法
创建一个隐式类,只需要在合适的类前面加上implict关键字,例如:
object Helpers { implicit class IntWithTimes(x: Int) { def times[A](f: => A): Unit = { def loop(current: Int): Unit = if(current > 0) { f loop(current - 1) } loop(x) } }}
这个例子创建了一个隐式类 IntWithTimes,该类包含了一个整型的参数值和一个新方法times.如果需要使用该类,只需将其导入到作用域,并调用times.
scala> import Helpers._ import Helpers._ scala> 5 times println("HI") HI HI HI HI HI
想要隐式类能正常使用,它的名称必须定义正确并且清晰,就像其它的隐含值或隐式转换。
注意:
隐式类必须注意以下规则:
1 . 它们必须定义在其它的trait/class/object内.例如:
object Helpers { implicit class RichInt(x: Int) // OK!}implicit class RichDouble(x: Double) // BAD!
2 . 在它们的构造器中,可能只允许一个非隐式参数,例如:
implicit class RichDate(date: java.util.Date) // OK!implicit class Indexer[T](collecton: Seq[T], index: Int) // BAD!implicit class Indexer[T](collecton: Seq[T])(implicit index: Index) // OK!
也可能你能够使用一个以上的非隐式参数,但这可能会导致隐式转换失效。
3 . 任何的方法,变量或常量或者伴生对象在作用范围内都不能和隐式类的名字相同。例如:
Note: This means an implicit class cannot be a case class.
object Barimplicit class Bar(x: Int) // BAD!val x = 5implicit class x(y: Int) // BAD!implicit case class Baz(x: Int) // BAD!
0 0
- scala 隐式类
- Scala 隐式类
- scala class隐式类
- Scala
- Scala
- scala
- scala
- Scala
- scala
- Scala
- scala
- scala
- Scala
- Scala
- scala
- scala
- Scala
- Scala
- 脚本式快捷键:一个简化shell终端命令输入的工具
- 26个Jquery使用小技巧
- int byte互相转换
- linux系统下将php和mysql命令加入到环境变量中的方法
- IOS开发常用GitHub开源项目(持续更新...)
- scala 隐式类
- linux IPC之套接字
- 【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应
- 正则表达式
- iOS从URL加载图片
- 第二十九次codeforces竞技结束 #293 Div 2
- MySQL查询优化:LIMIT 1避免全表扫描
- Spark入门到精通视频学习资料--第六章:Machine Learning on Spark(1讲)
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画