【问题标题】:How to remove a function in Julia REPL?如何删除 Julia REPL 中的函数?
【发布时间】:2016-06-19 01:14:36
【问题描述】:

如何删除在 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.

【问题讨论】:

  • 在开发时,我认为 REPL 是一个用于开发的沙箱。当代码变得稳定并安全地保存在 .jl 文件中时,它可以在新的 Julia 解释器中重新运行。带回家:准备偶尔重启。这将清除任何残留的命名空间污染,并且对于可复制性也很重要。
  • @user3580870 我想这涉及到一个关于如何使用 REPL 的更大问题。我习惯于在 R 中分析数据集,并且喜欢加载它们并使用库和我自己设计的函数来分析它们。在这种情况下,如果能够摆脱(我的)设计不佳的函数而无需重新加载庞大的数据集,那就太好了。

标签: julia read-eval-print-loop


【解决方案1】:

您无法在不重新启动 REPL (Julia v0.4) 的情况下删除函数。数据类型也是如此。

这与 Julia 的 type mechanism 的工作方式有关,但不幸的是,我对此知之甚少,无法进行更详细的解释。

【讨论】:

  • 从技术上讲,workspace() 函数提供了一个干净的工作空间重新启动 REPL。是的,我在这里很迂腐,因为从用户的角度来看,效果与重新启动 REPL 基本相同(除了旧工作区可通过 LastMain 获得)。
  • @ColinTBowers 对,它为您提供了一个干净的命名空间,但您也会丢失其他所有内容。
  • 哦,是的。它根本没有解决 OP 的问题 :-) 我只是迂腐地指出你没有必须重新启动 REPL。
【解决方案2】:

这是 Julia 文档所引用的参考。

没有可以删除功能的方法,因此最好的选择是重新启动终端。

https://docs.julialang.org/en/latest/manual/faq/#how-do-i-delete-an-object-in-memory

希望它尽快改变

【讨论】:

    【解决方案3】:

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

    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 仍然是已知的,但是你定义的方法已经没有了。但是对于按照您的要求删除“具有错误类型输入的函数”,这可能是您想要的解决方案。

    (基于this thread。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2021-12-23
      相关资源
      最近更新 更多