2008年6月12日

對Object!進行Append與Length?

REBOL 3.0現在允許擴充(extend)物件(object!),如下所示:
>> obj: context [ a: 1 ]
== make object! [
a: 1
]
>> append obj [ b 2 c 4]
== make object! [
a: 1
b: 2
c: 4
]

上面的例子中,[ b 2 c 4] 也可以寫成 [ b: 2 c: 4],效果一樣。

如果Block內的word和Object內的word相同時,會造成修改的效果。例如:
>> append obj [c 3]
== make object! [
a: 1
b: 2
c: 3
]

上面的例子,由於obj本來就有c,所以append之後,c的值會被改變。

特別注意,這些處理series的函數中,只有append可以用在物件上,remove、insert並不適用於物件。我猜想可能是因為remove、insert會讓context內部binding對應的方式亂掉。

Block不會先被reduce,如果有reduce的必要,必須自己來。這個時候,通常會使用compose或reduce/no-set,例如:
>> append obj reduce/no-set [ d: 365 + now ]
== make object! [
a: 1
b: 2
c: 3
d: 12-Jun-2009/22:56:29+8:00
]

想知道某物件有多少Word,可以利用Length?,例如:

>> length? obj
== 4

效果相當於「length? words-of obj」。

沒有留言: