| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Lifesource 19.12.2002 18:59
Александр я тут бился с этим делом никак не выходит, вот привожу пример скажите что не так?...@main[]
###Определяем хеш (оригинал)
$global_hash[$.row1(10)
$.row2[$.21(210)
$.22(220)]
$.row3[$.31(310)
$.32[$.temp[value]
$.pop[3]]]]
$new_hash[^add_with_change[$global_hash]]
^new_hash.row3.32.add[$.imap[4]]
^$GLOBAL_HASH=
^show_ready_hash[$global_hash]<br>
^$NEW_HASH=
^show_ready_hash[$new_hash]
<font color="red" size="10pt">И как видим всё добавилось в оригинал :( </font>
#Метод создаёт копию оригинала причём добовляет ещё один ключ в копию
@add_with_change[my_hash]
$result[^hash_create[$my_hash]]
^result.row2.add[$.999[poops]]
### Метод содаёт копию хеша, переданного в качестве параметра, при этом
#### копирует структуру оригинала, не ссылаясь на объекты(только хеши) содержащиеся в оригинале
##### (блин как хочется в это верить, но что то не так:( )
@hash_create[temp_hash][key;value]
^if($temp_hash is 'hash'){
$result[^hash::create[$temp_hash]] ^rem{если убрать из конструктура параметр,
то потеряется ключ 31 в row3(куда девается,
не могу понять...)}
^temp_hash.foreach[key;value]{
^if($value is 'hash'){
^result.add[$.$key[^hash_create[$value]]]}
}{
^result.add[$.$key[$value]]
}
}{$result[$temp_hash]}
### Метод выводит содержимое хеша
@show_ready_hash[this_hash][key;val]
^if($this_hash is 'hash'){
<ul>
^this_hash.foreach[key;val]{
^if($val is 'hash'){
<li>$key^[
^show_ready_hash[$val]
^]
}{
<li> ^if($val is 'string'){$key^[$val^]}{$key^($val^)}
}
}[</li>]
</ul>
}{
<br><font color="red" size="6pt">
<i><b>The parameter is not a hash! Here is its value=</b></i></font>
<font color="green" size="7pt">$this_hash</font><br>}