2010-06-18 58 views

回答

2

看起來就像是一個未設置實例的價值建構語法,而不是字unset!

>> comparison: [unset! #[unset!]] 
== [unset! unset!] 

>> type? first comparison 
== word! 

>> type? second comparison 
== unset! 

>> second comparison 
>> first comparison 
== unset! 

如果你在程序方面是,你可以用to-unset做到這一點,但有一個字面符號讓你躲閃reduce

>> comparison: reduce ['unset! to-unset none] 
== [unset! unset!] 

>> second comparison 
>> first comparison 
== unset! 

看起來他們已經保留了#[...]語法更多這類構造的。

+1

順便說一句,請查看我在Code Golf中的一些堅果Rebol-vs-Perl競賽。 :) http:// stackoverflow。com/questions/2527477/code-golf-connecting-the-dots/3066878#3066878 – HostileFork 2010-06-18 07:18:51

+0

Rebmu看起來很酷!多麼好用的REBOL! – 2010-06-18 07:36:08

+0

它變得越來越容易了,但是昨天晚上我做了一個關於點連接的連接,我覺得它不會推進到「獲勝」的地步......如果你想要,可以改進這些點。玩:) http://stackoverflow.com/questions/3034331/code-golf-rotating-maze/3060396#3060396 – HostileFork 2010-06-18 08:47:12

6

#[]是值的序列化形式。在控制檯中使用MOLD與MOLD/ALL玩,以獲得它的感覺。

4

#[]「語法」其實並不是一個語法本身(不合法的語法,如果你嘗試的話),只有這樣結構的特殊情況是「合法」的,像#[unset!]語法,#[true]語法,#[false]語法,#[none!]語法或#[datatype! unset!]語法。

更令人感興趣的是,#[unset!]值實際上是什麼。它正好是在每REBOL「未初始化的」變量的值(未在功能,不過,功能本地變量被初始化爲#[none!]),以及這樣的表達式的像print 1do []()結果等

關於「函數局部變量...初始化爲#[none!]」我應該補充說,只有在「未使用的細化」之後的變量(即實際調用中未使用的變量)連同細化變量一起初始化爲#[none!]

爲了進一步說明問題,true#[true]之間的句法(數據交換方言)區別在於,前者是一個詞,而後者是邏輯值!類型。從語義(Do方言)角度看,差異較小,因爲(全局)詞被解釋爲一個變量,恰巧指的是#[true]的值。

1

請看下面的例子:

trace on 
>> e: none 
Trace: e: (set-word) 
Trace: none (word) ;<<<<< 

>> e: #[none] 
Trace: e: (set-word) 
Trace: none (none) ;<<<<< 

none是在第一個字,但在第二個,#[none]不是一個字,它是數據類型none!的Rebol的值。 類似的其他值,如true,false#[unset!]的情況是特殊的,因爲每個未定義的變量實際上都有這個值。