In Rebol 2 there was a HASH! type as well as a MAP! type. Both of which were supported by the FIND and SELECT functions, as well as by path-based selection:
>> m: to map! [someKey someValue]
== make hash! [someKey someValue]
>> m/someKey
== someValue
>> select m 'someKey
== someValue
To detect that a key wasn't in the map, you could use FIND and test against NONE
>> find m 'someOtherKey
== none
But path-based selection would get an error in this case:
>> m/someOtherKey
** Script Error: Invalid path value: someOtherKey
** Near: m/someOtherKey
On the other hand, Rebol 3 only has MAP!. But FIND and SELECT only support series types, and MAP! is not considered to be a series any longer. The only way I see (?) to interact with maps is through path selection, which does not throw an error in the non-membership case:
>> m/someOtherKey
== none
...and if your key is in a variable (or a string) you have to use PAREN!
>> var: 'someKey
== someKey
>> m/(var)
== someValue
That works in Rebol 2 also, but with the same caveat of throwing an error instead of returning NONE when you ask for something that doesn't exist.
So if I'm getting this right, path selection is the "common" way of retrieving values from keys in Rebol 2 and 3. Despite that, I'm not seeing a common way of testing for lack of membership. How does one handle this?