iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0

說到Module

在看了官方說明文件的解說之後,仍然有點霧煞煞,我還是先以R語言中的namespace加上environment來理解它好了。簡單說,我認為Julia裡頭所謂的module某種層度上就是R語言中的environment。根據文件上Standard modules所說的,我猜想當我們一進入到Julia的環境中時,事實上就是在那三個標準modules所定義的name spaceenvironments空間。因此在這空間中,會有一系列預先定義的函數、變數等東西存在,當我們使用using或是import時,就會在原本的environment上添加一層新的environment,同時引入新的函數、變數等東西。
不過,Julia在區分usingimport這兩種方式時,個人倒是覺得這邊的語法沒有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的空間,這個空間會分別從LibBigLib引入整個module或是該module中的部份函數。不僅如此,它也可輸出MyType這個structfoo這個函數給其他module使用。第一次引入這個module時,系統會先pre-compile這個module,同時將編譯好的cached files放到DEPOT_PATH[1]/compiled/這個路徑下。之後,除非這個module有更改過,不然它就可以直接使用而不須再經過編譯。這點也就是一般我們這些人剛接觸Julia時,覺得Julia的效能並沒有其他script language來的好的主因。

關於module可以說的細節還很多,不過要等我理解清楚才有辦法說更多了。


上一篇
[Day 27] 不算初次接觸的Metaprogramming
下一篇
[Day 29] 用Julia來研究單細胞定序?
系列文
When Bioinfo met Julia: Bioinformatician的30天Julia學習之路32

尚未有邦友留言

立即登入留言