6.31. kink/container/HASH_SET¶
要素をハッシュテーブルに格納するsetの実装を提供する。
要素が公衆から渡され得る場合、DDoS攻撃を防ぐため、ハッシュ値の分布が予測できないようにしよう。暗号学的ハッシュ関数を使い、また暗号学的なランダムデータによる値の伸長を行う必要があるかもしれない。
6.31.1. HASH_SET.new($hash ...[$config={}])¶
newは、空のハッシュsetを新しく作って戻す。
コンフィグメソッド
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_SET.require_from('kink/container/')
:VAL.require_from('kink/')
:X <- new_val
:Y <- new_val
:Z <- new_val
:Set <- HASH_SET.new(VAL$id_hash){(:C)
C.eq(VAL$same?)
}
Set.push(X)
Set.push(Y)
stdout.print_line(Set.have?(X).repr) # => true
stdout.print_line(Set.have?(Z).repr) # => false