【发布时间】:2016-02-16 20:15:20
【问题描述】:
这是我第一次遇到阴影,似乎没有针对我的问题的资源。
如果我执行以下操作
let x = a list
let x = another list
然后 x 将保存第二个列表的内容。
我假设(根据我的导师所说)第一个列表不会自动销毁,只是在范围结束时收集垃圾。
我的问题是为什么? 一旦不可变对象被遮蔽,为什么我们不会自动删除第一个列表?这会让我认为仍然可以以某种方式访问数据。如果是这样,怎么做?
【问题讨论】:
-
你能通过在线链接识别课程吗?如果是这样,那么我们中的一些人会根据教师试图教授的概念给出更好的答案。
-
Guy Coder,它只是一个关于函数式编程范式的课程。讨论从上面的代码开始,我问为什么会发生这种情况,讲师解释了阴影,并且阴影很可能没有定义特殊的垃圾收集,所以我认为它是范围的结束。上面的代码是教练在声明一个新变量时不小心复制粘贴的,当然它仍然有效。
-
end of scope是什么意思。我有一个想法,但我的想法可能不是你想的那样。 -
所以上面的代码是在main中声明的,所以main的结束也就是程序的结束,数据会被删除。
-
它不应该被垃圾回收的原因是,如果你曾经进行递归问题解决,当你展开堆栈回到堆栈上的值回到范围内的点时,你可以分支该状态进入更深入的搜索。
标签: f# garbage-collection shadowing