这只是一种便利,但我觉得很有用。请注意,IPython允许像Matlab一样进行纯退出。因此,在Julia中允许别名是合理的。
感谢有关如何执行此操作的任何想法。
答案 0 :(得分:13)
如果您从命令行使用Julia,则 ctrl-d 有效。但是如果您打算通过键入命令来退出,则这不可能完全按照您希望的方式进行,因为在REPL中键入 quit 已经具有返回与退出相关联的值的含义,这是功能退出。
julia> quit
quit (generic function with 1 method)
julia> typeof(quit)
Function
但这并不罕见,例如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
...导致您从该会话中丢失您的工作。