2008年3月31日

logic!資料型別的位元欄位

大多數的語言都會有一種只能表示真(true)或假(false)的資料型別,有的語言稱此型別為boolean,有的稱為bool,REBOL稱它為logic!。

由於電腦資料處理時,最小的單位是位元組(8個位元),而8個位元能夠表達的資料有2的8次方(256)種,所以只用來表達logic!實在有一點浪費,但這也是無可奈何的事。

REBOL 3.0充分運用原本浪費的空間,來做更豐富的表達。logic!可以被視為有許多位元欄位(bit field),每個欄位都可以有自己的名稱:

>> paradigm: make logic! [ imperative object-oriented functional logical ]
== false
>> paradigm/imperative: true
== true
>> paradigm/functional: true
== true
>> mold/all paragigm
{#[logic! 5 [imperative object-oriented functional logical]]}

為何內部的值會是5?因為imperative(最低的位元)和object-oriented(第三低的位元)為true,所以值為#{00000101},也就是5。

邏輯值的位元欄位可以超過8個,例如:

>> paradigm: make logic! [ b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 ]
== false

由於只要有任何一個位元欄位為true,整體邏輯值就為true,所以位元欄位可以用來取代OR運算子或ANY函數,例如:

if any [b1 b2 b3 b4 b5] [
do-something
]

改寫成:

flags: make logic! [b1 b2 b3 b4 b5]

...

if flags [
do-something
]

沒有留言: