Julia 如何使用别名quit()退出?

Julia 如何使用别名quit()退出?,julia,Julia,这只是一种方便,但我认为很有用。请注意,IPython和Matlab一样允许纯退出。因此,在朱莉娅看来,允许使用别名是合理的 感谢您提供有关如何做到这一点的任何想法。在Julia辞职 如果从命令行使用Julia,则ctrl-d有效。但是,如果您打算通过键入命令退出,那么这不可能完全按照您希望的方式进行,因为在REPL中键入已具有返回与quit关联的值的含义,即函数quit julia> quit quit (generic function with 1 method) julia>

这只是一种方便,但我认为很有用。请注意,IPython和Matlab一样允许纯退出。因此,在朱莉娅看来,允许使用别名是合理的

感谢您提供有关如何做到这一点的任何想法。

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

julia> quit
quit (generic function with 1 method)

julia> typeof(quit)
Function
还有蟒蛇 但这并不罕见,例如

使用宏 在Julia REPL-like中使用\q可能很好,但不幸的是\。但是,如果您正在寻找一种简单的方法来实现这一点,那么宏呢

julia> macro q() quit() end

julia> @q
导致Julia退出


如果将宏定义放在a中,则每次运行解释器时它都可用。

正如waTeim所指出的,当您在REPL中键入
quit
时,它只会显示函数本身……无法更改此行为。如果不调用函数,就无法执行函数,而且在Julia的语法中调用函数的方法有限

但是,您可以做的是更改函数的显示方式。这是一个非常有攻击性的行为,不能保证有效,但是如果您非常想要这种行为,那么可以做以下几点:将这种行为攻击到display方法中

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
更具体的类型了,因此必须完全覆盖
writemi(::IO,::MIME“text/plain”,::Function)
定义,复制其实现


还要注意的是,这是相当出乎意料的,有点危险。一些库可能最终试图显示函数
quit
…导致您在该会话中丢失工作。

我在启动文件中使用了
@q
宏定义,它不像
psql
中的
\q
那样令人愉快,因为它需要一个狗屎和小指。OTOH,它符合julia的宏观世界,也许我会将我的caps lock重新映射到@。
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!

$