6.30. kink/container/HASH_MAP

キーをハッシュテーブルに格納するmapの実装を提供する。

キーが公衆から渡され得る場合、DDoS攻撃を防ぐため、ハッシュ値の分布が予測できないようにしよう。暗号学的ハッシュ関数を使い、また暗号学的なランダムデータによるキーの伸長を行う必要があるかもしれない。

6.30.1. HASH_MAP.new($hash ...[$config={}])

newは、空のハッシュmapを新しく作って戻す。

コンフィグメソッド

• C.eq($equivalent_to?): default = {(:X :Y) X == Y }

キーの同値関係

$equivalent_to?は、ふたつの引数X, Yを取る関数でなければならない。 `equivalent_to?(X Y)` は、 `X equivalent-to Y` のbool値を戻す。ここで `equivalent-to` は、キーの同値関係である。

ハッシュ

$hashは、キーの定義域内のすべてのX, Yについて、次の条件を満たさなければならない。

• if equivalent_to?(X Y) then hash(X) == hash(Y)

事前条件

$hashはキーを取り、整数のnumを戻す関数でなければならない。

$equivalent_to?はふたつのキーを取り、boolを戻す関数でなければならない。

:HASH_MAP.require_from('kink/container/')
:VAL.require_from('kink/')

:X <- new_val
:Y <- new_val
:Z <- new_val

:Map <- HASH_MAP.new(VAL$id_hash){(:C)
  C.eq(VAL$same?)
}
Map.set(X 'x')
Map.set(Y 'y')
Map.set(Z 'z')
stdout.print_line(Map.get(X).repr)  # => "x"