parser

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

 

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

! LOL

AleXp 04.10.2005 13:17

Перестаем улыбаться - уже разобрался и переделал:
@debugShowHash[h][k;v;_s]
###################################################################################################
# Визуализация объекта класса hash
#
#    string
#    debugShowHash[
#	hash h
#    ]
#
<br>
$_s[$caller._s&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^;&nbsp^; ]
^h.foreach[k;v]{
	^if(!def $v){$_s^$.$k = ^debugShowVoid[$v]}
	^if($v is bool){$_s^$.$k = ^debugShowBool[$v]}
	^if($v is string){$_s^$.$k = ^debugShowString[$v]}
	^if($v is int || $v is double){$_s^$.$k = ^debugShowDouble($v)}
	^if($v is hash){
		$_s^$.$k (hash) = ^debugShowHash[$v]
		$caller._s[^_s.mid(^eval(^_s.pos[ ]+1))]
	}
}
#end @debugShowHash[]
А насчет "лишних комментариев"... Когда я был молодой, то меня учили документировать код. В частности, открыв файл visualization.p, любой программист увидав описание метода в самом начале файла, поймёт что в нем делается и зачем. Можно конечно убрать строки
# @debugShowObject[]Визуализация объектов
# @debugShowVoid[]Визуализация пустых объектов
# @debugShowString[]Визуализация объекта класса string
# @debugShowTable[]Визуализация объекта класса table
# @debugShowImage[]Визуализация объекта класса image
...
но тогда надо будет написать много-много всего на страничке для скачивания этой библиотеки. И после скачивания человек пытающийся вникнуть в чужой (мой) код будет скакать туда-сюда между браузером, редактором с открытым файлом visualization.p, каким-нибудь readme.doc, и этим форумом. Оно надо? А, при необходимости, удалить мои "лишние" комментарии из файла visualixation.p любой может в два удара по клавишам - это как раз не проблема.

Необходимо различать ситуацию когда пишешь "для себя" и ситуацию "для публики"! Я, как правило, пишу всегда так, чтобы было "для публики". Более того: я действительно удалил из visualization.p лишние строки. Иначе выглядело бы примерно так (это из другой библиотеки):
@TrimArr[arrHash][_subHash;_boolResult]
###################################################################################################
# Функция удаляет из массива все элементы с пустыми значениями. Возвращает
# "истину", если был удален хоть один пустой элемент, иначе - "ложь".
#
#    bool
#    TrimArr[
#	arrHash hash
#    ]
#
# Если входной hash определен...
^if(def $arrHash){

# Инициализация переменной результата
	$_boolResult[$FALSE]
# Создание пустого hash'а-вычитаемого
	$_subHash[^hash::create[]]

# Бежим по ключам входного hash'а
	^arrHash.foreach[_key;_var]{
# Если значение текущего ключ представляет собой строку из пробелов
		^if($_var is string){$_var[^_var.trim[]]}
# Если значение ключа пусто
		^if(!def $_var){
# Формируем hash-вычитаемое
			$_subHash.$_key[]
# Определяем результат выполнений функции как положительный
			$_boolResult[$TRUE]
		}
	}
# Вычитание из входного hash'а пустых ключей
	^arrHash.sub[$_subHash]
# Результат работы функции
	$result($_boolResult)
}{
# Результат функции при пустом входящем hash
	$result($FALSE)
}
#end @TrimArr[]
Это как нижнее бельё, в т.ч. и у мужика, которое всегда должно быть цивильным и привлекательным: никогда не знаешь куда жизнь закинет вечером и как сложится ситуация. Пришел в гости, тяпнул полташку, начал раздеваться, а у тебя трусы "семейного" типа и до колен - ну неудобняк же! Придется ещё пару раз "тяпнуть" чтобы снять напряжение, и, не ровен час, все пьянством и закончится, как обычно в общем ;)

Глобальная переменная $TEMP_DIR - не вопрос. Но если она не задана - ничего страшного. В операторе @debugShowTable[] файл таблицы будет создаваться/удаляться в корне сайта. Опять-таки - не принципиально, на работоспособность всего кода не влият, а на мысли может быть кого-либо из скачавших натолкнет.

Ну что? Будем на www.parser.ru выкладывать или надо все-таки доработать?