在 Rebol 2 中有一个 HASH!类型以及地图!类型。FIND 和 SELECT 函数以及基于路径的选择都支持这两者:
>> m: to map! [someKey someValue]
== make hash! [someKey someValue]
>> m/someKey
== someValue
>> select m 'someKey
== someValue
要检测键不在地图中,您可以使用 FIND 并针对 NONE 进行测试
>> find m 'someOtherKey
== none
但是在这种情况下,基于路径的选择会出错:
>> m/someOtherKey
** Script Error: Invalid path value: someOtherKey
** Near: m/someOtherKey
另一方面,Rebol 3 只有 MAP!。但是 FIND和 SELECT只支持系列类型和 MAP!不再被认为是一个系列。我看到(?)与地图交互的唯一方法是通过路径选择,这在非会员情况下不会引发错误:
>> m/someOtherKey
== none
...如果您的密钥在变量(或字符串)中,则必须使用 PAREN!
>> var: 'someKey
== someKey
>> m/(var)
== someValue
这在 Rebol 2 中也有效,但同样需要注意的是,当您请求不存在的东西时,会抛出错误而不是返回 NONE。
因此,如果我做对了,路径选择是从 Rebol 2 和 3 中的键中检索值的“常见”方式。尽管如此,我没有看到一种常见的测试缺乏成员资格的方式。如何处理这个?