如何别名quit()退出?

时间:2014-08-20 15:27:39

标签: julia

这只是一种便利,但我觉得很有用。请注意,IPython允许像Matlab一样进行纯退出。因此,在Julia中允许别名是合理的。

感谢有关如何执行此操作的任何想法。

2 个答案:

答案 0 :(得分:13)

退出朱莉娅

如果您从命令行使用Julia,则 ctrl-d 有效。但是如果您打算通过键入命令来退出,则这不可能完全按照您希望的方式进行,因为在REPL中键入 quit 已经具有返回与退出相关联的值的含义,这是功能退出。

julia> quit
quit (generic function with 1 method)

julia> typeof(quit)
Function

还有Python

但这并不罕见,例如Python has similar behavior

>>> quit
Use quit() or Ctrl-D (i.e. EOF) to exit

使用宏

in postgres REPL这样的Julia REPL中使用\ q可能会很好,但不幸的是\ already has a meaning。但是,如果您正在寻找一种简单的方法来实现这一点,那么宏

怎么样
julia> macro q() quit() end

julia> @q
  

导致Julia退出

如果将宏定义放在.juliarc.jl file中,则每次运行解释器时都可以使用它。

答案 1 :(得分:3)

正如waTeim所说,当你在REPL中键入quit时,它只是显示函数本身......而且无法改变这种行为。如果不调用它就无法执行函数,并且使用Julia的语法调用函数的方法有限。

这是非常hacky并且不能保证工作,但是如果你想要这种行为非常糟糕,那么你可以做什么:将这种行为破解到显示方法中。

julia> function Base.writemime(io::IO, ::MIME"text/plain", f::Function)
           f == quit && quit()
           if isgeneric(f)
               n = length(f.env)
               m = n==1 ? "method" : "methods"
               print(io, "$(f.env.name) (generic function with $n $m)")
           else
               show(io, f)
           end
       end
Warning: Method definition writemime(IO,MIME{symbol("text/plain")},Function) in module Base at replutil.jl:5 overwritten in module Main at none:2.
writemime (generic function with 34 methods)

julia> print # other functions still display normally
print (generic function with 22 methods)

julia> quit # but when quit is displayed, it actually quits!

$

不幸的是,没有比::Function更具体的类型,因此您必须完全覆盖writemime(::IO,::MIME"text/plain",::Function)定义,复制其实现。

另请注意,这是非常意外的,有点危险。某些库实际上可能最终会尝试显示函数quit ...导致您从该会话中丢失您的工作。