如何删除 Julia REPL 中的函数?

ult*_*ian 6 read-eval-print-loop julia

如何删除在 Julia REPL 中工作时创建的函数?可以在不重新启动会话的情况下完成此操作吗?这对我来说是因为我创建了一个具有错误类型输入的函数,然后使其正确,但无法摆脱旧的。

\n\n

http://docs.julialang.org/en/release-0.4/manual/faq/上的常见问题解答\n指出:

\n\n
Julia does not have an analog of MATLAB\xe2\x80\x99s clear function; once a name is\ndefined in a Julia session (technically, in module Main), it is always present.\n
Run Code Online (Sandbox Code Playgroud)\n

fue*_*zig 7

假设你已经定义了一个函数

xx(x) = 42
Run Code Online (Sandbox Code Playgroud)

你可以找到该方法

m = @which xx(1)
Run Code Online (Sandbox Code Playgroud)

并将其删除

Base.delete_method(m)
Run Code Online (Sandbox Code Playgroud)

NoteBase.delete_method(xx)不起作用,即您不会xx像这样删除新函数(带有 name )。如果你尝试,你仍然会得到:

julia> xx
xx (generic function with 0 methods)
Run Code Online (Sandbox Code Playgroud)

=> 函数名xx仍然已知,但是你定义的方法已经消失了。但是,要按照您的要求删除“输入类型错误的函数”,这可能是您想要的解决方案。

(基于此线程。)


dog*_*dog 5

如果不重新启动 REPL (Julia v0.4),则无法删除函数。数据类型也是如此。

这与 Julia 的类型机制的工作方式有关,但不幸的是我对它知之甚少,无法进行更详细的解释。

  • 从技术上讲,“workspace()”函数提供了一个干净的工作空间,*无需*重新启动 REPL。是的,我在这里很迂腐,因为从用户的角度来看,效果基本上与重新启动 REPL 相同(除了可以通过“LastMain”使用旧工作区)。 (3认同)