关于julia:如何别名quit()退出?

How to alias quit() to quit?

这只是一种方便,但我认为很有用。注意,ipython和matlab一样允许纯退出。因此,在Julia中允许使用别名是合理的。

谢谢你对如何做这件事有任何想法。


在茱莉亚辞职

如果从命令行使用Julia,则ctrl-d有效。但是,如果您打算通过键入命令退出,这是不可能的,这正是您想要的方式,因为在repl中键入quit已经具有返回与quit相关的值的含义,即函数quit。

1
2
3
4
5
julia> quit
quit (generic function with 1 method)

julia> typeof(quit)
Function

也Python

但这并不罕见,例如,Python有类似的行为。

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

使用宏

在julia repl中使用q可能很好,就像在postgres repl中一样,但不幸的是也已经有了意义。但是,如果您正在寻找一种简单的方法来实现这一点,那么宏如何

1
2
3
julia> macro q() quit() end

julia> @q

Causes Julia to Quit

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


正如Wateim所指出的,当您在repl中键入quit时,它只显示函数本身……并且没有办法改变这种行为。如果不调用函数,就不能执行它,而且用Julia的语法调用函数的方法也有限。

但是,您可以做的是更改函数的显示方式。这是非常糟糕的,并不能保证有效,但是如果您非常希望这种行为,您可以这样做:将这种行为黑客到显示方法中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,导致您在该会话中丢失工作。