2012-11-19 60 views
0

在Rebol 2中,你可以用EMPTY檢查空位嗎?爲空BITSET從Rebol 2變爲Rebol 3的行爲!測試;如何測試EMPTY?

>> empty? make bitset! #{00} 
== true 

在雷博爾3 (生成21-FEB-2011/0:44:24)不是這種情況。

>> empty? make bitset! #{00} 
== false 

問題或新行爲?無論哪種方式,我還可以做這個測試嗎?不同大小的空白比特在R2或R3中的比較結果不相等:

>> (make bitset! #{00}) == (make bitset! #{0000}) 
== false 

回答

1

新行爲:具有> 0位的位不是空的;即使它沒有設置位,它仍然包含清零位。

在R3,您可以用or空bitset的一個給定的位集合,以找出是否第一個是空的 - 那就是:它沒有位設置 - 還有:

>> empty? (make bitset! #{00}) or (make bitset! #{}) 
== true 

>> empty? (make bitset! #{0000}) or (make bitset! #{}) 
== true 

作爲方便快捷,用戶也可以直接or一個空binary!,實現如下定義:

bitset-clear?: func [bitset [bitset!]] [empty? bitset or #{}] 

再次使用你的例子:

>> bitset-clear? make bitset! #{00} 
== true 

>> bitset-clear? make bitset! #{0000} 
== true 
+0

Gotcha。我認爲這是一個過於基本的錯誤,但我仍然沒有完全理解改變的理由。修復工程,和[Cyphre提供相同的東西](http://chat.stackoverflow.com/transcript/message/6293069#6293069)。 *(再次注意聊天鏈接,我們可以讓更多的Rebol人認識到StackExchange的價值嗎?在這裏幫助我。)*感覺像是一種依賴OR的不變屬性的細微契約,但如果這是一條規則,那麼這是一條規則...: -/ – HostileFork

+0

理由可能源於對位集的「系列解釋」(我向該動機添加了一個句子)。但是,一點點!不是該系列的成員!排版。 – earl

+0

我同意@HostileFork,這是令人難以置信的奇怪行爲。我不得不多次重讀這個條目,以瞭解'or'和空位的情況。與EMPTY的非常簡單易懂的行爲相比,這看起來過於複雜?在R2中... – DocKimbel

0

可能是在R2和R3之間構建比特集的方式之一。這仍然適用於R3(A111):

>> eb: charset [] 
== make bitset! #{} 

>> empty? eb 
== true 
+0

在您完成了關於CSV問題的職責範圍之外的工作後,我不想指出這本身並不是答案。 :-)解決方法的任何想法? – HostileFork

+0

夠公平:)顯然沒有正確地閱讀這個問題。看起來是一個錯誤,當然對我來說。 – rgchris