工作流程建议
这里是高效使用 Julia 的一些建议。
基于 REPL 的工作流程
正如在 Julia REPL 中演示的那样,Julia 的 REPL 为高效的交互式工作流程提供了丰富的功能。这里是一些可能进一步提升你在命令行下的体验的建议。
一个基本的编辑器 / REPL 工作流程
最基本的 Julia 工作流程是将一个文本编辑器配合 julia
的命令行使用。一般会包含下面一些步骤:
把还在开发中的代码放到一个临时的模块中。新建一个文件,例如
Tmp.jl
,并放到模块中。module Tmp
export say_hello
say_hello() = println("Hello!")
# your other definitions here
end
把测试代码放到另一个文件中。新建另一个文件,例如
tst.jl
,开头为include("Tmp.jl")
import .Tmp
# using .Tmp # we can use `using` to bring the exported symbols in `Tmp` into our namespace
Tmp.say_hello()
# say_hello()
# your other test code here
并把测试作为
Tmp
的内容。或者,你可以把测试文件的内容打包到一个模块中,例如module Tst
include("Tmp.jl")
import .Tmp
#using .Tmp
Tmp.say_hello()
# say_hello()
# your other test code here
end
优点是你的测试代码现在包含在一个模块中,并且不会在
Main
的全局作用域中引入新定义,这样更加整洁。使用
include("tst.jl")
来在 Julia REPL 中include
tst.jl
文件。打肥皂,冲洗,重复。(译者注:此为英语幽默,被称为“洗发算法”在
julia
REPL 中摸索不同的想法,把好的想法存入tst.jl
。要在tst.jl
被更改后执行它,只需再次include
它。
基于浏览器的工作流程
也可以通过 IJulia 在浏览器中与 Julia REPL 进行交互,请到该库的主页查看详细用法。
基于Revise的工作流程
无论你是在REPL还是在IJulia,你通常可以通过 Revise优化 你的开发经历。 通常情况,无论何时启动Julia,就请按照Revise文档中的说明配置好Revise。 一旦配置好,Revise将跟踪任何加载模块中的文件变化。 和任何用includet
加载到 REPL 的文件 (但不包括普通的include
); 然后你就可以编辑这些文件,并且更改会在不重新启动julia会话的情况下生效。 标准工作流与上面基于 REPL 的工作流类似,区别如下:
把你的代码放到一个在你的加载路径里的模块中。 要这样做有很多种方法,通常推荐以下两种选择:
对于长期的项目,使用PkgTemplates:
using PkgTemplates
t = Template()
t("MyPkg")
这将在
.julia/dev
目录中创建一个空白包"MyPkg"
。 请注意,通过它的Template
构造器,PkgTemplates 允许控制许多不同的选项。在下面的第 2 步中,编辑
MyPkg/src/MyPkg.jl
以更改源代码,并编辑MyPkg/test/runtests.jl
以进行测试。对于“一次性”项目,您可以通过在临时目录(例如
/tmp
)中进行工作来避免任何清理需求。切换到临时目录并启动 Julia,然后执行以下操作:
pkg> generate MyPkg # type ] to enter pkg mode
julia> push!(LOAD_PATH, pwd()) # hit backspace to exit pkg mode
如果你重新启动 Julia 会话,则必须重新发出修改
LOAD_PATH
的命令。在下面的第 2 步中,编辑
MyPkg/src/MyPkg.jl
以更改源代码,并创建你选择的任何测试文件。
构建你自己的包
在加载任何代码之前, 确保 Revise 已经被启用:
using Revise
或者按照教程设置自动加载。然后切换到包含测试文件(假设文件为
"runtests.jl"
)的目录下,并:julia> using MyPkg
julia> include("runtests.jl")
你可以修改在 MyPkg 文件夹中的代码然后用
include("runtests.jl")
重新跑一遍测试。 通常,你可能需要重新启动Julia 会话来使得这些变化生效(受一些 限制)。