parser

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

 

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

"интересный" код...

Misha v.3 05.10.2006 17:12 / 05.10.2006 17:14

можно пытаться в нем разбираться, но... оно вам надо? вам-же надо найти и исправить ошибку, а не понять как все работает...

поэтому лучше вам расставлять assert-ы, чтобы поймать в какой момент (при каких условиях) падает.

пляшите от ошибки: добавляйте как я и предложил ^throw[assert;и выводите тут информацию которая поможет вам понять момент падения]

хотя я уже понял почему падает:

@shTree[id;data] - определен метод с именем shTree и 2 входными переменными. эти переменные являются _локальными_, т.е. они _не_ доступны из других методов.

из этого метода вызывается метод shTreeLevel, который в свою очередь имеет 2 входняе переменные (тоже локальные): id и leveldata

но внутри этого метода происходит обращение к переменной $data. в этом же методе такой переменной _нет_, т.к. она объявлена локальной в другом методе (хотя возможно где-то есть код, который создает глобальную $data, но тут этого не видно).

что было с видимостью переменных в предыдущих версиях я не очень помню, но вот тупой workaround:
@shTree[id;_data]
$data[$_data]

...дальше как было...
так вы сделаете входной переменной переменную $_data, и в первой же строчке метода перепишите её значение в глобальную переменную $data (у парсера переменные глобальны, пока не сказано иное, но вы ведь не скажете этого?). соотв. глобальная $data будет видна внутри метода shTreeLevel.

удачи.
получается что то что написано тут (создание хеша и заполнение поля show):
...
ненужно?
или я непонимаю какой-то логики?
нужно. каждый элемент в хеше $data содержит информацию о том, как достать и как вывести данные (под как достать и как вывести подразумеваю то, что он знает какой метод нужно вызвать для того и другого действия. это знание == хранение junction. не думаю что тут это оправдано, но тем не менее.)