Rebol 2 には HASH がありました。タイプだけでなくMAP!タイプ。どちらも 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 のキーから値を取得する「一般的な」方法です。それにもかかわらず、メンバーシップの欠如をテストする一般的な方法は見当たりません。これをどのように処理しますか?