Julia 作为高级语言,很好的封装特性肯定是基本特征, Julia的基本结构是 最外面一层是module 下面包含一系列function。在julia里面function非常廉价而高效,建议所有功能都装进function里,而不是写在外面。
module Modulename
#function
#....#....
end
如果你将自己编写的module存在了不同的目录,比如MyModule.jl 放在~/下,执行
using MyModule
会报错,因为Julia认为你用的包没有下载,julia 用 LOAD_PATH来管理路径,我们查看一下LOAD_PATH的类,
(typeof是一个常用函数,用来查看类,julia中所有东西,不论是变量还是操作都含有类,可以通过定义类来对变量进行限制或者根据不同的类实现同一操作比如+,具有无限多可能的methods)
typeof(LOAD_PATH)
返回:Array{Any,1} 可见是一个任何类型(1.0版本特征,0.6前是String)的一维Array。
我们可以通过
push!(LOAD_PATH, "~/.")
添加进去,以后就可以直接using 了。建议自建的module还是放在一起的好。
举个栗子
module MyModule
f(x,y)= x^2 + y^2
function hello(name)
println("hello",name)println("hello",name)
end
end
using MyModule
此时如果调用
MyModule.<Tab>
会自动补全你模块下函数,并给出补全提示,非常爽。如果想不用模块名直接调用内部函数,需要在模块里加上
module MyModule
export f
f(x,y)= x^2 + y^2f(x,y)= x^2 + y^2
function hello(name)
println("hello",name)println("hello",name)
end
end
就可以直接调用f了。
如果你项避免冲突,不想直接调用f,可以通过
import MyModule
而不是
using MyModule
这样MyModule里面所有函数都需要MyModule. 来进行调用了。
当然这只是Module的入门,比如和Python很像的__init__函数等功能,就需要慢慢学习了。
下次可能学习一下 struct, 这个和Module容易产生混淆,其实用法区别很大的。