如何在Julia REPL中删除一个函数?

6
你在Julia REPL中创建了一个函数,现在想删除它,不重启会话是否可行?因为我创建了一个输入类型错误的函数,然后更正了它,但无法删除旧函数。 http://docs.julialang.org/en/release-0.4/manual/faq/上的常见问题解答指出:
Julia does not have an analog of MATLAB’s clear function; once a name is
defined in a Julia session (technically, in module Main), it is always present.

1
当我开发时,我把REPL视为一个开发的沙盒。当代码变得稳定并安全地保存在.jl文件中时,可以在一个新的Julia解释器中重新运行它。要牢记的是,偶尔需要重新启动。这样可以清除任何残留的命名空间污染,并且也对可复制性非常重要。 - Dan Getz
@user3580870 我想这引出了一个更大的问题,关于如何使用REPL。我习惯于在R中分析数据集,并喜欢使用库和我自己设计的函数来加载和分析它们。在这种情况下,能够轻松删除(我)设计不良的函数而无需重新加载大型数据集将是很好的。 - ultradian
3个回答

7

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

xx(x) = 42

你可以使用以下方法找到

m = @which xx(1)

并使用以下内容将其移除

Base.delete_method(m)

请注意,Base.delete_method(xx) 不起作用,也就是说,您不能通过这种方式摆脱具有名称为 xx 的新函数。如果尝试这样做,仍然会得到以下结果:

julia> xx
xx (generic function with 0 methods)

=> 函数名xx仍然存在,但是你定义的方法已经消失了。不过对于像你所要求的"使用错误类型的输入删除函数",这可能是你想要的解决方案。

(基于此线程。)


5

在Julia v0.4中,您无法删除函数而不重新启动REPL。数据类型也是如此。

这与Julia的类型机制有关,但很遗憾,我对此知之甚少,无法提供更详细的解释。


3
从技术上讲,workspace()函数提供了一个干净的工作空间,而不需要重新启动REPL。是的,我在这里很龟毛,因为从用户的角度来看,效果与重新启动REPL基本相同(除了旧的工作空间可通过LastMain获得)。 - Colin T Bowers
@ColinTBowers 对,这样可以给你一个干净的命名空间,但你也会失去其他所有东西。 - dognotdog
哦,是的。这根本没有解决 OP 的问题 :-) 我只是在严谨地指出你不必重新启动 REPL。 - Colin T Bowers

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接