在看了官方說明文件的解說之後,仍然有點霧煞煞,我還是先以R語言中的namespace
加上environment
來理解它好了。簡單說,我認為Julia裡頭所謂的module
某種層度上就是R語言中的environment
。根據文件上Standard modules所說的,我猜想當我們一進入到Julia的環境中時,事實上就是在那三個標準modules
所定義的name space
及environments
空間。因此在這空間中,會有一系列預先定義的函數、變數等東西存在,當我們使用using
或是import
時,就會在原本的environment
上添加一層新的environment
,同時引入新的函數、變數等東西。
不過,Julia在區分using
及import
這兩種方式時,個人倒是覺得這邊的語法沒有Python的import
& from XXX import YYY
這種語法來的清楚。
根據文件上說的
module MyModule
using Lib
using BigLib: thing1, thing2
import Base.show
export MyType, foo
struct MyType
x
end
bar(x) = 2x
foo(a::MyType) = bar(a.x) + 1
show(io::IO, a::MyType) = print(io, "MyType $(a.x)")
end
上面這段程式碼在引入時會創造出一個稱為MyModule
的空間,這個空間會分別從Lib
及BigLib
引入整個module或是該module中的部份函數。不僅如此,它也可輸出MyType
這個struct
及foo
這個函數給其他module使用。第一次引入這個module時,系統會先pre-compile這個module,同時將編譯好的cached files放到DEPOT_PATH[1]/compiled/
這個路徑下。之後,除非這個module有更改過,不然它就可以直接使用而不須再經過編譯。這點也就是一般我們這些人剛接觸Julia時,覺得Julia的效能並沒有其他script language來的好的主因。
關於module
可以說的細節還很多,不過要等我理解清楚才有辦法說更多了。