- 第1节:Julia 简介
- 第2节:Julia 开始
- 第3节:Julia 变量
- 第4节:Julia 整数和浮点数
- 第5节:Julia 数学运算和基本函数
- 第6节:Julia 复数和分数
- 第7节:Julia 字符串
- 第8节:Julia 函数
- 第9节:Julia 控制流
- 第10节:Julia 变量的作用域
- 第11节:Julia 类型
- 第12节:Julia 方法
- 第13节:Julia 构造函数
- 第14节:Julia 类型转换和类型提升
- 第15节:Julia 模块
- 第16节:Julia 元编程
- 第17节:Julia 多维数组
- 第18节:Julia 线性代数
- 第19节:Julia 网络和流
- 第20节:Julia 并行计算
- 第21节:Julia 日期和时间
- 第22节:Julia 可空类型
- 第23节:Julia 交互
- 第24节:Julia 运行外部程序
- 第25节:Julia 调用 C 和 Fortran 代码
- 第26节:Julia 嵌入式 Julia
- 第27节:Julia 扩展包
- 第28节:Julia 开发扩展包
- 第29节:Julia 代码性能优化
- 第30节:Julia 代码样式
- 第31节:Julia 常见问题
- 第32节:Julia 与其他语言的区别
Julia 交互
交互
Julia 有一个全功能的交互式命令行 REPL (read-eval-print 循环)内置在可执行的 julia
内。除了允许快速并且简易的评定 Julia 语句,他还有一个可搜索历史的功能,tab 补齐功能,以及更多有用的快捷键,和专门的帮助,并且还有 shell 模式。REPL 能够通过简单的无参数调用或双击执行来进行启动:
$ julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" to list help topics
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0-prerelease+2834 (2014-04-30 03:13 UTC)
_/ |\__'_|_|_|\__'_| | Commit 64f437b (0 days old master)
|__/ | x86_64-apple-darwin13.1.0
julia>
如果要退出互动会话,敲击 ^D
即 control 键加上 d 键 - 或者是编辑 quit()
,然后在敲击回车键。REPL 会给你 julia>
提示。
不同的提示模式
Julia 模式
REPL 有四种主要的操作模式。第一种并且最常见的一种是 Julian 提示。它是默认的操作模式;每一行的开始都会是 julia>
。在这里,你可以输入 Julia 表达式。在一个完整的表达式已经输入好之后敲打回车将会评估该条目并且显示最后一个表达式的结果。
julia> string(1 + 2)
"3"
这里有许多独特的特点可以来进行交互工作。除了显示结果外,REPL 同样将结果绑定到变量 ans
。 在该行尾部的分号可以用作一个标志来抑制显示结果。
julia> string(3 * 4);
julia> ans
"12"
帮助模式
当指针在一行的开始位置时,敲击 ?
提示将会变为帮助模式。Julia 将会尝试打印在帮助模式中的帮助或是文档:
julia> ? # upon typing ?, the prompt changes (in place) to: help>
help> string
Base.string(xs...)
Create a string from any values using the "print" function.
除了方法名,完成方法调用可以看到哪一个方法被指定的参数调用了。宏,类型和变量也可以查询。
help> string(1)
string(x::Union(Int16,Int128,Int8,Int32,Int64)) at string.jl:1553
help> @printf
Base.@printf([io::IOStream], "%Fmt", args...)
Print arg(s) using C "printf()" style format specification
string. Optionally, an IOStream may be passed as the first argument
to redirect output.
help> String
DataType : String
supertype: Any
subtypes : {DirectIndexString,GenericString,RepString,RevString{T<:String},RopeString,SubString{T<:String},UTF16String,UTF8String}
想要退出帮助模式可以在一行的开始按下退格键。
Shell 模式
帮助模式适用于快速访问文档,另一个常见任务是使用系统 Shell 来执行系统命令。就像当光标在一行的开始位置时 ?
来进入帮助模式,使用分号 (;)
可以进入 shell 模式。并且想要退出模式时可以在一行的开始按下退格键。
julia> ; # upon typing ;, the prompt changes (in place) to: shell>
shell> echo hello
hello
查找模式
在所有以上的方法中,所有执行行会被保存到历史文件当中,并且能够被查找。为了初始化一个对先前历史的增量搜索,敲击 ^R
- control 键加上键盘上的 r
键。提示会被更改为 (reverse-i-search)':
,并且随着你敲击,查询请求将会出现在引用中。达到匹配要求的最近一次的结果将会被动态更新在右面的控制台中。想要找到更老的结果就使用相同查询,然后再敲击一次 ^R
。
^R
是反向查询,而 ^S
是正向查询,提示为 (i-search)':
。这两个可以相互结合使用来相对的移动到前一个或是后一个匹配结果。
键绑定
Julia REPL 很好的使用了键绑定功能。上面已经介绍了很多种控制键绑定(^D
用来退出, ^R
和 ^S
用来查询),但是这里还有更多的键绑定。除了控制键,这里还有很多 meta - 键绑定。这些键绑定因平台的不同而不同,但是大部分终端默认使用 alt - 或 option - 选一个键来发送 meta - 键(或是通过配置)。
自定义快捷键
Julia REPL 的快捷键可以通过向 REPL.setup_interface()
传入字典类型的数据来实现自定义. 字典的关键字可以是字符, 也可以是字符串. 字符 *
代表默认默认操作. ^x
代表快捷键 Control 键加 x
键. Meta 键加 x
键可以写作 "\\Mx"
. 字典的数据必须是 nothing
(代表忽略该操作), 或者参数为 (PromptState, AbstractREPL, Char
的函数. 例如, 为了实现绑定上下键到搜索历史记录, 可以把下面的代码加入到 .juliarc.jl
:
import Base: LineEdit, REPL
const mykeys = {
# Up Arrow
"\e[A" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_prev(s, LineEdit.mode(s).hist)),
# Down Arrow
"\e[B" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_next(s, LineEdit.mode(s).hist))
}
Base.active_repl.interface = REPL.setup_interface(Base.active_repl; extra_repl_keymap = mykeys)
可供使用的按键和操作请参阅 base/LineEdit.jl
.
Tab 补全
在 Julia REPL (或者帮助模式下的 REPL), 可以输入函数或者类型名的前几个字符, 然后按 Tab 键来显示可能的选项::
julia> stri
stride strides string stringmime strip
julia> Stri
StridedArray StridedVecOrMat String
StridedMatrix StridedVector
Tab 键也可以使 LaTeX 数学字符替换成 Unicode 并且显示可能的选项::
julia> \pi[TAB]
julia> π
π = 3.1415926535897...
julia> e\_1[TAB] = [1,0]
julia> e₁ = [1,0]
2-element Array{Int64,1}:
1
0
julia> e\^1[TAB] = [1 0]
julia> e¹ = [1 0]
1x2 Array{Int64,2}:
1 0
julia> \sqrt[TAB]2 # √ is equivalent to the sqrt() function
julia> √2
1.4142135623730951
julia> \hbar[TAB](h) = h / 2\pi[TAB]
julia> ħ(h) = h / 2π
ħ (generic function with 1 method)
julia> \h[TAB]
\hat \heartsuit \hksearow \hookleftarrow \hslash
\hbar \hermitconjmatrix \hkswarow \hookrightarrow \hspace