parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Занимательные хеши

Вячеслав 02.05.2006 04:48

Вот пришлось столкнуться с задачкой...
Представьте, что ребуется работать с хешами, причем условия таковы, что велика вероятность наличия ключей, совпадающих с именами полей/методов hash-объекта. Как известно, в таких случаях скрытые ключами методы нельзя вызвать таким образом:
$h1[
    $.add[]
    $.delete[]
    $.foreach[]
]
# этот метод найден не будет:
^h1.delete[...]
Т.е. никакие методы у h1 использовать нельзя, и поля тоже. Далее требуется создать и динамически наполнить хеш h2 (с ключами опять та же проблема), потом сделать объединение этих хешей, и, наконец, вызвать ^h2.foreach[k;v]{...}.
Eсли бы не существующее ограничение, это могло бы выглядеть очень просто:
#$h1 уже есть, допустим, он пришел как параметр функции
$h2[^hash::create[]]
... здесь ^какой-нибудь_цикл{ в котором $h2.$key[$value]}
$h2[^h2.union[h1]])
$h2.foreach[k;v][... тут тоже что-то происходит]
И вот что у меня получилось, если в коде предусмотреть ситуацию, когда у хешей возможно наличие ключей с совпадающими с методами именами:
[code/]
#$h1 уже есть, допустим, он пришел как параметр функции
$h2[^hash::create[]]
$h2_foreach[$h2.foreach]
$h2_add[$h2.add]
$h2_intersection[$h2.intersection]

... здесь ^какой-нибудь_цикл{ в котором $h2.$key[$value]}

$h_intersect[^h2_intersection[$h1]]
^h2_add[$h1]
^h2_add[$h_intersect]

^h2_foreach[k;v][... тут тоже что-то происходит]
[/code]
Если вдруг на ваш взгляд окажется, что я чесал уши ногами, буду рад увидеть альтернативную реализацию.

  • Занимательные хеши, Вячеслав 02.05.2006 04:48
    • вариант, Александр Петросян (PAF) [M] 02.05.2006 21:55