前言
本文說明 Raku 的資料型態。
說明
以下是一些常見的 Raku 資料型態:
Nil
:沒有值Bool
:布林數- 數字
Int
:任意精確度整數UInt
:任意精確度無號整數Rat
:有理數FatRat
:任意精確度有理數Num
:倍精確度浮點數 (相當於 C 語言的double
)Complex
:複數
Str
:字串- 日期
Date
:日期DateTime
:包含時間的日期
Sub
:副常式 (函數)
由於 Raku 資料型態有複雜的繼承關係,直接看 Raku 官網容易看不懂,先記得幾個常用的資料型態即可。
布林 (Boolean)
布林 (boolean) 只有 True
和 False
兩種值,主要用於條件判斷中。
數字 (Number)
整數
Raku 的整數形態是大數,只要記憶體足夠,可以表現任意精確度。
整數表示法
Raku 常用的整數表示方式如下:
- 十進位:
12345
,最常見的表示法 - 十六進位:
:16<FF>
- 八進位:
:8<755>
- 二進位:
:2<10101>
甚至可以用其他介於 2 至 36 間的位數:
- 五進位:
:5<342>
- 三十進位:
:30<102squr>
數字可以用底線分隔,視覺上較美觀,如 123_456_789
。
有理數
Raku 的數字系統和一般程式語言略為不同。以下的程式會引發錯誤:
$ ruby -e 'raise "Unequal" unless 0.1 + 0.2 - 0.3 == 0.0'
但以下的 Raku 程式可正確執行:
$ raku -e '0.1 + 0.2 - 0.3 == 0.0 or die "Unequal";'
這是因為 Raku 內部使用 Rat
儲存有理數,不會有浮點數造成的微小誤差。
這項特性幾乎不會出現在其他程式語言,最好把該特性當成特例,不要過度依賴。
自然型態
為了和 C 語言橋接,Raku 也有直接對應硬體的自然型態。這時候的數字是固定寬度。
字串 (String)
在 Raku 中,用以下方式可以撰寫字串實字:
- 一對單引號
- 一對雙引號
q
加上成對符號,相當於一對單引號qq
加上成對符號,相當於一對雙引號
以下是實例:
q<Hello World> eq "Hello World" or die "It should be equal";
在這個例子中,我們使用兩種方式來撰寫相同的字串實字,故其值相等。
物件 (Object)
除了使用現有的型能外,可以透過物件導向增加新的型態。
Perl 一開始不支援物件導向,Perl 5 的物件系統是後來才附加上去的,相對較為原始。Perl 社群參考 Raku 的物件系統,引入 Moose 後,Perl 5 才有比較進步的物件系統。
相對來說,Raku 支援原生的物件導向語法,和 Moose 的語法差不多。