在另外一個問題,我看到的語法如下:REBOL中的語法#[]是什麼?
#[unset!]
那是什麼?如果我在R3中說type? #[unset!]
,它會告訴我unset!
,但它並不能解決#[]
的祕密。
好奇。
在另外一個問題,我看到的語法如下:REBOL中的語法#[]是什麼?
#[unset!]
那是什麼?如果我在R3中說type? #[unset!]
,它會告訴我unset!
,但它並不能解決#[]
的祕密。
好奇。
看起來就像是一個未設置實例的價值建構語法,而不是字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!
看起來他們已經保留了#[...]語法更多這類構造的。
#[]
是值的序列化形式。在控制檯中使用MOLD與MOLD/ALL玩,以獲得它的感覺。
的#[]
「語法」其實並不是一個語法本身(不合法的語法,如果你嘗試的話),只有這樣結構的特殊情況是「合法」的,像#[unset!]
語法,#[true]
語法,#[false]
語法,#[none!]
語法或#[datatype! unset!]
語法。
更令人感興趣的是,#[unset!]
值實際上是什麼。它正好是在每REBOL「未初始化的」變量的值(未在功能,不過,功能本地變量被初始化爲#[none!]
),以及這樣的表達式的像print 1
,do []
,()
結果等
關於「函數局部變量...初始化爲#[none!]
」我應該補充說,只有在「未使用的細化」之後的變量(即實際調用中未使用的變量)連同細化變量一起初始化爲#[none!]
。
爲了進一步說明問題,true
和#[true]
之間的句法(數據交換方言)區別在於,前者是一個詞,而後者是邏輯值!類型。從語義(Do方言)角度看,差異較小,因爲(全局)詞被解釋爲一個變量,恰巧指的是#[true]
的值。
請看下面的例子:
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!]
的情況是特殊的,因爲每個未定義的變量實際上都有這個值。
順便說一句,請查看我在Code Golf中的一些堅果Rebol-vs-Perl競賽。 :) http:// stackoverflow。com/questions/2527477/code-golf-connecting-the-dots/3066878#3066878 – HostileFork 2010-06-18 07:18:51
Rebmu看起來很酷!多麼好用的REBOL! – 2010-06-18 07:36:08
它變得越來越容易了,但是昨天晚上我做了一個關於點連接的連接,我覺得它不會推進到「獲勝」的地步......如果你想要,可以改進這些點。玩:) http://stackoverflow.com/questions/3034331/code-golf-rotating-maze/3060396#3060396 – HostileFork 2010-06-18 08:47:12