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", in ~/.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 │
Import
像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命令加载的,而不是using命令。
Include
如果您想使用模块中未包含的其他文件中的代码怎么办? 为此,您可以使用 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 包的结构 −
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 ... ...