Julia 编程 - 模块和包
Julia 编程语言中的模块用于将相关函数和其他定义组合在一起。模块的结构如下 -
module ModuleName end
我们可以在上面两行之间定义和放置函数、类型定义等。
安装模块
Julia 的包管理器可用于下载和安装特定的包。要从 REPL 进入包管理,请键入 ](右括号)。进入包管理器后,您需要输入以下命令 -
(@v1.5) pkg> add DataFrames Updating registry at `C:\Users\Leekha\.julia\registries\General` Resolving package versions... Updating `C:\Users\Leekha\.julia\environments\v1.5\Project.toml` [a93c6f00] + DataFrames v0.21.7 No Changes to `C:\Users\Leekha\.julia\environments\v1.5\Manifest.toml`
上面的命令会将DataFrames包添加到 Julia 的环境中。提示中的 (@v1.5) 告诉我们,我们正在默认项目“v1.5”中工作,位于 ~/.julia/environments/ 中。
使用模块
安装后,就可以开始使用已安装模块中的函数和定义了。为此,我们需要告诉 Julia 编程语言为我们当前的会话提供代码。使用using语句将接受一个或多个已安装模块的名称。
例子
julia> using DataFrames [ Info: Precompiling DataFrames [a93c6f00-e57d-5684-b7b6-d8193f3e46c0] julia> empty_df = DataFrame(X = 1:10, Y = 21:30) 10×2 DataFrame │ Row │ X │ Y │ │ │ Int64 │ Int64 │ ├─────┼───────┼───────┤ │ 1 │ 1 │ 21 │ │ 2 │ 2 │ 22 │ │ 3 │ 3 │ 23 │ │ 4 │ 4 │ 24 │ │ 5 │ 5 │ 25 │ │ 6 │ 6 │ 26 │ │ 7 │ 7 │ 27 │ │ 8 │ 8 │ 28 │ │ 9 │ 9 │ 29 │ │ 10 │ 10 │ 30 │
进口
与 using一样,import也可用于模块。唯一的区别是 import 让您决定如何访问模块内的函数。在下面的示例中,我们在一个模块中有两个不同的函数。让我们看看如何导入它们 -
例子
julia> module first_module export foo1 function foo1() println("this is first function") end function foo2() println("this is second function") end end Main.first_module
现在我们需要使用import来导入这个模块 -
julia> import first_module julia> foo1() ERROR: foo1 not defined julia> first_module.foo1() "this is first function"
您可以注意到,函数 foo1() 仅当与模块前缀一起使用时才能访问。这是因为first_module是使用import命令而不是使用命令加载的。
包括
如果您想使用模块中未包含的其他文件中的代码怎么办?为此,您可以使用include()函数,它将在当前模块的上下文中评估文件的内容。它将搜索调用它的源文件的相对路径。
套餐
在 Julia 软件包环境中使用 status 命令查看已安装的所有软件包。
(@v1.5) pkg> status Status `C:\Users\Leekha\.julia\environments\v1.5\Project.toml` [336ed68f] CSV v0.7.7 [a93c6f00] DataFrames v0.21.7 [864edb3b] DataStructures v0.18.6 [7806a523] DecisionTree v0.10.10 [38e38edf] GLM v1.3.10 [28b8d3ca] GR v0.52.0 [86223c79] Graphs v0.10.3 [7073ff75] IJulia v1.21.3 [682c06a0] JSON v0.21.1 [91a5bcdd] Plots v1.6.8 [d330b81b] PyPlot v2.9.0 [ce6b1742] RDatasets v0.6.10 [3646fa90] ScikitLearn v0.6.2 [f3b207a7] StatsPlots v0.14.13 [b8865327] UnicodePlots v1.3.0 [112f6efa] VegaLite v1.0.0
包的结构
我们知道 Julia 使用 git 来组织和控制包。所有包都以 .ji 前缀存储。让我们看看微积分包的结构 -
Calculus.jl/ src/ Calculus.jl module Calculus import Base.ctranspose export derivative, check_gradient, ... include("derivative.jl") include("check_derivative.jl") include("integrate.jl") end derivative.jl function derivative() ... end ... check_derivative.jl function check_derivative(f::...) ... end ... integrate.jl function adaptive_simpsons_inner(f::Funct ... end ... symbolic.jl export processExpr, BasicVariable, ... import Base.show, ... type BasicVariable <: AbstractVariable ... end function process(x::Expr) ... end ... test/ runtests.jl using Calculus using Base.Test tests = ["finite_difference", ... for t in tests include("$(t).jl") end ... finite_difference.jl @test ... ...