1.3 交互式控制台
安装之后,在Windows中只需点击Julia程序或其快捷方式,或者在Linux、MacOS中的Shell中,运行如下命令:
$julia
便可启动Julia环境,打开Julia提供的交互式控制台REPL(Read Eval Print Loop),会出现类似图1-1的界面。
界面中展示了官网及文档网址、帮助提示信息及版本发布等信息,随后便会出现如下提示符:
julia>
图1-1 REPL启动信息
这是REPL交互命令的输入位置,奇妙的Julia学习之旅便可从此开始了。
如果需要了解REPL启动信息之外更多的环境信息,我们便可在提示符julia>之后输入函数versioninfo()并回车:
julia> versioninfo() Julia Version 1.0.0 Commit 5d4eaca0c9 (2018-08-08 20:58 UTC) Platform Info: OS: Linux (x86_64-pc-linux-gnu) CPU: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz WORD_SIZE: 64 LIBM: libopenlibm LLVM: libLLVM-6.0.0 (ORCJIT, skylake)
返回的内容会因为主机的操作系统、硬件配置或Julia版本等不同而不同。
Windows内置的字体对Unicode字符集的支持并不全面,可更换DejaVu字体集,能够通过GitHub免费获得,网址为https://dejavu-fonts.github.io,可以用于替代Windows控制台(终端)的字体。另外,如果不希望使用Windows默认的控制台,也可以采用不同的终端程序,例如Conemu和Mintty。当然,还可以使用交互性更好的IDE,包括Juno、Sublime-IJulia或Ijulia等。
提示 REPL是学习Julia一个非常方便的环境,我们能够直接在其中输入并执行Julia语句,而且可及时获得计算结果。本书中的绝大部分示例也都会基于REPL给出,所以建议读者在阅览本书时,最好身边有个安装Julia环境的电脑并已打开了REPL环境,能够对照着书中的例子逐一尝试,这样可以更好理解所述的内容。
当然,在学习或使用告一段落后,可在REPL中按下CTRL+D(^D)或者在提示符后输入quit()并回车,退出该环境,同时对话窗口会关闭。
为了避免在使用REPL中出现不必要的麻烦,下面简单地介绍一下REPL的使用方法,包括输入语句、快捷键、帮助等。
1.语句输入
在Julia的语法中,英文分号表示语句或表达式的结束,但不是必需的。
在REPL中可以输入单行或者多行语句,当我们按下ENTER键回车换行时,REPL会自动判断表达式语句是否完整。如果不是可以换行的语句,会以红色信息提示错误;如果语句可以换行但不是完整的表达式,REPL会在新行保持输入状态,等待用户继续输入。在回车时,如果判定表达式已经完成,输入状态会结束,REPL将执行已经输入的表达式语句,并在新行开始处输出计算结果,或者提示必要的警告与错误信息。
我们也可以在julia>提示符后直接输入变量名回车,查看其内容。不过如果回车前在尾部加上了分号,计算结果会被屏蔽而不会自动显示。
当然,我们也可以将多个语句和表达式写在扩展名为jl的Julia脚本文件中,通过Julia程序进行调用执行,后文会单独介绍。
2.全局变量ans
为了方便地调试各种表达式,REPL中每段语句的执行结果都会临时存储在一个名为ans的全局变量中。即使我们将运行结果赋值给自定义变量,ans中也同样会保留一份拷贝,而且其内容会在语句的每次成功运行后自动更新。
不过,该变量仅在REPL中有效,在Julia脚本文件中是没有实际用途的。
3.内容打印
如果要在一段语句中打印中间结果,可以使用print()及println()函数。这两个函数都可以接收任意类型、任意数量的参数,在执行时会立即将参数的内容打印到屏幕上。例如:
julia> print(1, 2, "abc", 'a', [1 2 3], "\n", (1,2,3)) # 换行需要自己输入换行符(井 # 号为行内注释) 12abca[1 2 3] # 打印的内容,第一行 (1, 2, 3) # 打印的内容,第二行
两个函数的区别仅在于:前者需显式地在参数中给出换行符\n才会在尾部换行打印,后者会在所有参数打印完后自动换行。
提示 在专门介绍Julia函数的定义与调用方式之前,我们经常会使用这两者之外的各种函数。一般而言,Julia中的函数调用与其他语言相似,即函数名后跟着圆括号,其中以英文逗号列出所需的参数值,如上例中所示。
4.帮助模式
在使用REPL的过程中,我们可以随时在julia>之后按下英文问号?所在的按键,打开帮助模式,此时提示符会发生变化:
help?>
这时便进入了帮助模式。在新的提示符之后输入需要查阅的任何内容,即可获得相关帮助信息。例如:
help?> Int search: Int Int8 Int64 Int32 Int16 Int128 Integer intersect interrupt intersect! InteractiveUtils InterruptException Int64 <: Signed 64-bit signed integer type.
其中显示了有关Int的文档内容(此处暂不解释,通过后续学习便可了解)。
注意 按下?键打开帮助模式时julia>之后不能有任何内容,否则会切换失败。
5.历史查询
REPL会记录输入过的语句表达式与当时的模式状态。只需在提示符julia>后按向上(Up)的方向键,便会出现曾经输入的语句。若不断按下该键,历史语句便会按时间从近及远地逐一呈现;而按下Down键时会回过头反向查询。在需要的语句出现时,按下回车便可重新执行该语句。
除此之外,也可以按下CTRL+R(^R)复合键打开历史搜索模式。在如下的提示符之后输入字符,便能列出与之相关的历史语句:
(reverse-i-search)`':