Scala惰性赋值:lazy的使用
来源:互联网 发布:磁力链接转换软件 编辑:程序博客网 时间:2024/05/17 23:00
在一些情况中我们经常希望某些变量的初始化要延迟,并且表达式不会被重复计算。就像我们用Java实现一个懒汉式的单例。如:
- 打开一个数据库连接。这对于程序来说,执行该操作,代价式昂贵的,所以我们一般希望只有在使用其的引用时才初始化。(当然实际开发中用的是连接池技术)
- 为了缩短模块启动时间,可以将当前不需要的某些工作推迟执行。
- 保证对象中其他字段的初始化能优先执行。
在Scala中,使用lazy关键字来实现延迟执行,如果使用了lazy定义某一个变量,则这个变量只有在被使用时才会执行初始化。如下代码:
演示代码1:object lazyinitval { def init(): Int = { println("init::::::") 0 } val resource:Int = init() def main(args: Array[String]): Unit = { println("start:::") println(resource) println("end:::") }}运行结果:init::::::start:::0end:::
演示代码2:object lazyinitval { def init(): Int = { println("init::::::") 0 } lazy val resource:Int = init() def main(args: Array[String]): Unit = { println("start:::") println(resource) println("end:::") }}运行结果:start:::init::::::0end:::
经过上述代码即运行结果对比,可以证明,使用lazy声明的变量只有在使用的时候才会进行初始化。在Scala中,通过使用保护式来实现惰性值。当客户代码引用了惰性值时,保护式会拦截引用并检查此时是否需要初始化惰性。由于保护式能够确保惰性在第一次访问之前便已初始化,因此增加保护式检查只有当第一次引用惰性值时才是必要的。
由于,保护式一直会检查惰性值是否已经初始化,所以惰性值与“立刻”值相比,其具有额外的开销。所以我们需要考虑惰性值的使用情况。只有当保护式带来的额外开销小于初始化带来的开销时,或者将某些值惰性化能简化系统初始化过程并确保执行顺序满足条件时,我们才应该使用惰性值。
0 0
- Scala惰性赋值:lazy的使用
- 【scala】Scala中lazy关键字的使用和理解
- scala的lazy
- scala-04For与Function进阶实战、Lazy的使用
- scala-04For与Function进阶实战、Lazy的使用
- Scala中lazy关键字的使用和理解
- 惰性求值-Lazy evaluation
- Python的闭包(Closure)与惰性计算(Lazy Evaluation)
- Scala学习第四天 Scala的For与Function进阶实战、Lazy的使用
- Scala学习第四天 Scala的For与Function进阶实战、Lazy的使用
- Scala lazy
- Scala基础—异常、Lazy使用示例
- 惰性初始模式 Lazy Initialization
- Scala学习回顾(四)---- For与Function进阶实战、Lazy的使用
- Scala学习第四天:For与Function进阶实战、Lazy的使用
- hibernate的lazy使用
- Hibernate----lazy的使用
- 基于表达式模版(expression template)的惰性求值(lazy evaluation)
- Java基础——内部类
- 文章标题
- CPU位数和操作系统位数和计算机字长和C++基本数据类型长度
- redis内存优化、持久化以及主从复制
- 汉诺塔问题
- Scala惰性赋值:lazy的使用
- 术语Misc设备类型
- localStorage存储数组
- HDU 2176 取(m堆)石子游戏(Nim game)
- 安卓学习之路
- android N 拨打电话流程(MO)
- View的事件分发机制
- PCB过孔简介
- 【数据结构与算法】单链表排序