加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

当定义关闭时,Scala如何维护变量的值?

发布时间:2020-12-16 09:14:35 所属栏目:安全 来源:网络整理
导读:scala是否通过复制或引用维护变量的值? 例如,在Ruby中,关闭将实际上延长所有需要的变量的生命周期,它不会复制它们,而是保留对它们的引用,并且变量本身将不符合垃圾收集的资格(如果语言具有垃圾收集),而关闭在“. [SKORKIN] 解决方法 Scala中的关闭也不会深
scala是否通过复制或引用维护变量的值?

例如,在Ruby中,关闭将实际上延长所有需要的变量的生命周期,它不会复制它们,而是保留对它们的引用,并且变量本身将不符合垃圾收集的资格(如果语言具有垃圾收集),而关闭在“. [SKORKIN]

解决方法

Scala中的关闭也不会深入复制对象,它们只会保留对对象的引用.而且,闭包不能得到它自己的词汇范围,而是使用周围的词汇范围.

class Cell(var x: Int)
var c = new Cell(1)

val f1 = () => c.x /* Create a closure that uses c */

def foo(e: Cell) = () => e.x
  /* foo is a closure generator with its own scope */

val f2 = foo(c)    /* Create another closure that uses c */

val d = c          /* Alias c as d */
c = new Cell(10)   /* Let c point to a new object */
d.x = d.x + 1      /* Increase d.x (i.e.,the former c.x) */

println(f1())      /* Prints 10 */
println(f2())      /* Prints 2 */

我无法评论垃圾回收,但是我假设JVM的垃圾收集器不会删除由闭包引用的对象,只要闭包仍被引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读