如何清除或删除 Julia 中的全局变量?
Posted
技术标签:
【中文标题】如何清除或删除 Julia 中的全局变量?【英文标题】:How does one clear or remove a global in julia? 【发布时间】:2014-05-04 00:50:43 【问题描述】:是否有任何类似于 MATLAB 的“清除”的语法,即如果我有一个全局变量“a”。我该如何摆脱它?我该怎么做
的类比clear a
【问题讨论】:
【参考方案1】:在此处查看此问题的最新答案:https://docs.julialang.org/en/v1/manual/faq/#How-do-I-delete-an-object-in-memory%3F
从文档中检索:
Julia 没有类似 MATLAB 的 clear 函数;曾经的名字 在 Julia 会话中定义(技术上,在模块 Main 中),它是 永远存在。
如果您关心内存使用情况,您可以随时将对象替换为 那些消耗更少内存的。例如,如果 A 是千兆字节大小的 您不再需要的数组,您可以使用 A = 0 释放内存。 下次垃圾收集器运行时,内存将被释放;你 可以通过 gc() 强制执行此操作。
【讨论】:
以上链接失效。【参考方案2】:朱莉娅 0.6
在 Julia 0.6 中。您可以通过调用clear!()
来删除该变量并释放它的内存。
你必须打电话清除!关于变量的符号名:
julia> x = 5
5
julia> sizeof(x)
8
julia> clear!(:x)
julia> sizeof(x)
0
正如 DFN 指出的那样,这实际上不会删除对象,而是将它们设置为 nothing
。这对于从工作区释放内存很有用,因为您可以“删除”非常量对象的内存占用。
朱莉娅 1.0+
这在 Julia 1.0+ 中不起作用。如果您使用的是 1.0+,则必须将对象设置为 Nothing
并让垃圾收集器从那里获取它。
这是来自官方文档here。
【讨论】:
这很有趣,可惜还没有完全清除。该值仅设置为nothing
。例如,你不能做julia> const x = 3
,因为那样你会得到ERROR: cannot declare x constant; it already has a value
。
很公平。我发现这对于从非常量对象中释放一些内存很有用。
它绝对有用,而且,我猜,与现有的官方解决方案一样接近。它只是有这个弱点。这对我来说是新的:)
我在 Julia 1.4.2 中收到 ERROR: UndefVarError: clear! not defined
【参考方案3】:
对于 Julia-0.6.4,
clear!(:x)
正如@niczky 所说,它正在 iJulia 中工作。
但是,对于 Julia-1.0.0,
clear!(:x)
...抛出以下内容:
ERROR: UndefVarError: clear! not defined
Stacktrace:
[1] top-level scope at none:0
所以,对于 Julia-1.0.0,它已经坏了。
【讨论】:
【参考方案4】:绝对 clear!(:x) 不能在 notebook(IJulia) 中使用 julia 0.6.0!您可以选择使用 x = 0 作为替代。
【讨论】:
【参考方案5】:从 0.3.9 开始,可以通过 workspace() 函数清除所有全局变量(获取新工作区)。
也可以使用 LastMain(例如 LastMain.foobar)从最后一个工作区获取变量。
因此,目前做您想做的事情的唯一方法是清除所有内容并将除您想要的变量之外的所有内容转移到您的新工作区。
【讨论】:
【参考方案6】:目前,没有。但是,跟踪该功能存在一个问题:
https://github.com/JuliaLang/julia/issues/2385
【讨论】:
Atom/Juno REPL 中的exit()
怎么样,有什么问题吗?谢谢。以上是关于如何清除或删除 Julia 中的全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何通知尾部更新到 C++ 窗口中的线程? [读取全局变量的未缓存值]
text location.href导致窗口自定义的全局变量清除