jullia中的模块导入的语句主要有两种
下面是一个模块的例子
module MyModule
export x, y
x() = "x"
y() = "y"
p() = "p"
end
使用module定义一个模块,module和end的区间就是一个命名空间了。
导入一个模块有两种关键字 using和import
这两个关键词的区别是,import更像我们平时那个模块。就像python的import
下面是几种导入方式差异的表格
导入代码 | 当前作用域导入了哪些变量? | 可增加新方法的名字 |
---|---|---|
using MyModule |
All export ed names (x and y ), MyModule.x , MyModule.y and MyModule.p
|
MyModule.x , MyModule.y and MyModule.p
|
using MyModule: x, p |
x and p
|
|
import MyModule |
MyModule.x 、MyModule.y 和 MyModule.p
|
MyModule.x 、MyModule.y 和 MyModule.p
|
import MyModule.x, MyModule.p |
x 和 p
|
x 和 p
|
import MyModule: x, p |
x 和 p
|
x 和 p
|
using相当于把模块里面的全局变量全部导入了,最终的导入是以全局变量的形式,相当于python的from xxx import *
而 import则是作为一个命名空间导入,这样你就可以mymodule.x这样来调用了,并且import是和export对应的。
另外import还有一个关键的地方是,可以你修改import导入的变量,但是你不能修改using的变量
这两个模块导入的方式,并不适用于你在本地编写代码。因为julia的包导入是到他自己的路径里去寻找模块的。
所以除非你在他指定的path里写模块,不然是不能导入的。
模块文件路径
全局变量 LOAD_PATH
包含了调用 require
时 Julia搜索模块的目录。可以用 push!
进行扩展 :
push!(LOAD_PATH, "/Path/To/My/Module/")
将这一段代码放在 ~\.juliarc.jl
里能够在每次 Julia启动时对 LOAD_PATH
扩展。此外,还可以通过定义环境变量 JULIA_LOAD_PATH
来扩展 Julia 的模块路径。
扩展模块路径到你写的模块的位置之后,就可以使用import或者using正常导入了。
这点就有点像go语言了,早期也有类似的限制,就是代码必须放到GOPATH里面。但是后面有了go mod 用作包管理之后,只要用go mod初始化过在任何目录都能正常使用包管理了。
include
正常我们用include就差不多了
include相当于代码拼接,你导入的代码会在include的位置执行。
include("mycode.jl")
就比较简单易用了。
include可以正常使用相对路径之类的,vscode上也支持路径补全。
网友评论