如何别名 quit() 退出?

Posted

技术标签:

【中文标题】如何别名 quit() 退出?【英文标题】:How to alias quit() to quit? 【发布时间】:2014-10-14 01:06:43 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

在 Julia 中退出

如果您从命令行使用 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

使用宏

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

julia> macro q() quit() end

julia> @q

导致 Julia 辞职

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

【讨论】:

我在我的启动文件中使用了@q 宏定义,它不如psql 中的\q 好,只是因为它需要一个大便和小指。 OTOH,它适合朱莉娅的宏观世界,也许我会将我的大写锁定重新映射到@。【参考方案2】:

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

然而,您可以做的是改变函数的显示方式。这是非常 hacky 并且不能保证有效,但如果你非常想要这种行为,你可以这样做:将这种行为破解到 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,MIMEsymbol("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... 导致您在该会话中丢失您的工作。

【讨论】:

【参考方案3】:

在 Julia 中与退出有关

我正在寻找一些简单的东西。这个问题自 2017 年以来一直没有更新,因为我现在尝试学习 Julia,并花一些时间在谷歌上搜索一些简单且类似于 python 的东西。在这里,我发现了什么: 您可以使用:

exit()

注意

我用julia 1.53

【讨论】:

以上是关于如何别名 quit() 退出?的主要内容,如果未能解决你的问题,请参考以下文章

如何退出 Vim

Java+Selenium——浏览器退出quit和close的区别

自动退出 Telnet 命令返回提示,无需人工干预 ^] quit 关闭退出代码 1

捕获 TERM 并发送 QUIT 后 Heroku 上的独角兽退出超时

Unity 3D 5.0版本以上用C#语言如何编写退出游戏按钮的代码?

在linux的终端怎么退出python命令行