iT邦幫忙

DAY 13
0

科學運算和資料處理的潛力新秀--Julia語言系列 第 13

julia (13) -- 深入julia的型別(type)

今天繼續講一些有關type的實際操作,算是比較偏向語法細節的介紹。我的目的是用我自己在julia學習經驗,向大家介紹一些這個type和

julia語言裡用::來連結一個實體(instance)和type。::的英文念作"an instance of"(中文翻作xxx為某個type的實體,但中文講起就是沒有辦法像英文那麼簡潔啊)
不過::在julia裡並不是用來宣告某個值的型別,它的功能比較接近assertion,例如:

julia> x=3
3

julia> x::Int
3

在這個例子中,我們先指定x=3,接下來用執行x::Int,一切都沒什麼異樣。

然後,當我們執行x::Int32時就出現了assertion error,這是因為系統預設整數為Int64,以下就是執行結果。

julia> x::Int32
ERROR: type: typeassert: expected Int32, got Int64

julia> x::Int64
3

問題來了,如果硬要使用Int32作為整數3的型別呢? 我們可以用convert()這個函式進行型別強制轉換:

julia> x=convert(Int32,x)
3

julia> x::Int32
3

在上面這個例子中,3這個整數就被強制轉為Int32了。

之前有提過,這裡也要再次提醒讀者,x本身是沒有型別的,它只是一個變數名稱,或是可以看作一個標籤,真正有型別的是x這個變數所指向的實體。

接下來我們來介紹有關抽象型別(abstract type)的語法。

前一段我們介紹過::是an instance of,對於抽象型別julia也有對應的<:,可理解為a subtype of,舉個例子:

julia> Int32<:Real
true

julia> Int32<:FloatingPoint
false

根據系統內設的定義,Int32是<:Real的subtype,所以傳回true,反之Int32<:不是FloatingPoint的subtype,所以傳回false。

如果使用者要自定type之間的繼承關係,可以使用abstract這個keyword,像是這樣:

abstract Real <: Number

在一些OOP語言裡,會有一個最最基本的物件在金字塔的頂端,而程式的所有物件都會繼承自這個基本物件。julia的type系統也有類似的設計,在julia裡這個type叫做Any,所以的type都是從這裡衍生出來的。

今天花太多時間在debug新的2048AI,所以只能寫到這裡,再不發文鐵人生活就要中斷了,大家晚安。


上一篇
julia (12) -- 這不是OOP!
下一篇
julia (14) -- 程式效能的分析工具profile
系列文
科學運算和資料處理的潛力新秀--Julia語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言