0

在 Rebol 2 中,您可以使用 EMPTY 检查空位集?

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

在 Rebol 3 (Build 21-Feb-2011/0:44:24)中,情况并非如此。

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

错误还是新行为?不管怎样,我还能怎么做这个测试?不同大小的空位集在 R2 或 R3 中不相等:

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

2 回答 2

1

新行为:>0 位的位集不为空;即使它没有设置位,它仍然包含已清除的位。

在 R3 中,您可以or使用空位集来确定给定的位集,以确定第一个位集是否为空——即:它没有设置位——以及:

>> 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
于 2012-11-20T12:54:26.883 回答
0

可能是 R2 和 R3 之间构建位集的方式的差异之一。这在 R3 (A111) 中仍然成立:

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

>> empty? eb
== true
于 2012-11-19T14:03:35.450 回答