如何别名 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() 退出?的主要内容,如果未能解决你的问题,请参考以下文章
Java+Selenium——浏览器退出quit和close的区别
自动退出 Telnet 命令返回提示,无需人工干预 ^] quit 关闭退出代码 1
捕获 TERM 并发送 QUIT 后 Heroku 上的独角兽退出超时