parser

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

 

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

Этот класс не наследуется.

Luzhnikovskiy 30.06.2002 19:51

Основная проблема, как мне кажется (если не прав, пусть поправит PAF) в том, что:
1. Обращение к столбцу $table.column
2. Обращение к методу ^table.method
Допустим унаследовали, создали метод remove...
А теперь зовем ^table.remove
Что это? Метод или ошибка при обращении к столбцу?
А если ^table.remove.int[]? Что преобразуем в int - результат работы метода или столбец?

Понятно, можно посмотреть на определение класса, решить, что такое remove, но у парсера нет возможности делать несколько проходов по тексту с целью снача определить ху_из_ху, а потом (во втором проходе) ыполнить собственно код. А за один проход очень много ресурсов на это надо.

Как вариант можно поступить так:
Создать свой класс, в котором базовой переменной будет что-то с типом table, а все методы будут обращаться к это внутренней переменной. Допустим:
@CLASS
myclass

@create[mode;data]
^if($mode eq "nameless"){
$myclassvar[^table::create[nameless]{$data}]
}{
$myclassvar[^table::create{$data}]
}

@item[name]
$myclassvar.$name

@menu[code]
^myclassvar.menu{^process{$code}}
и на странице
@USE
myclass.class

@main[]
$mytable[^myclass::create[;aaa -> bbb
1 -> 2
3 -> 4]]
<html><head />
<body>
^mytable.menu{^mytable.item[aaa]-^mytable.item[bbb]}
</body>
</html>
что в итоге даст 1-2 3-4...