parser

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

 

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

пожелания и насколько бросившихся в глаза ньюансов :)

Misha v.3 28.08.2007 17:51

- не вижу необходимости таскать в каждом классе интерпретируемого языка много лишних букв. как минимум можно смело удалять из .p все упоминания меня. я переживу. если очень хочется -- можно оставить их в README :)

- может тексты вынести, а комментарии написать на английском? я до сих пор мучаюсь из-за своих старых русских текстов/комментов в классах, хотя уже пару лет как перешел на UTF внутри.

-
@today[]
  ^pfAssert:fail[Вызов функции абстрактного класса.]    

@now[]
  ^pfAssert:fail[Вызов функции абстрактного класса.]    

@year[sSource]
  ^pfAssert:fail[Вызов функции абстрактного класса.]    
прикольно конечно, но может...
pfClass.p
$sAbstractMethodCall[Вызов функции абстрактного класса.]
и потом где надо:
@ymd[sSource]
^pfAssert:fail[$sAbstractMethodCall]
- isEmail устарел. по крайней мере мне за то регулярное выражение, которое сейчас висит в pfString писали багрепорты раз в месяц. :) при этом есть pfValidate:isValidEmail с другим функционалом...

- pfValidate:isExistingURL -- я бы взял в ^untaint[as-is]{} $aString

- pfCache:_hash2table -- работает без описанных локальных переменных k и v и с рекурсивным вызовом чисто случайно :)
это нехороший хак (переменная перезаписывается, но лишь после этого она не используется). не хорошо так делать. да и $v у нас есть в foreach-е, так что можно не писать $aHash.$k =>
@_hash2table[aHash;aParent][lUID;k;v]
## Преобразует хэш строк в таблицу
## Параметр aParent передавать не нужно
  $result[^table::create{key	parent	value	isHash	uid}]
  ^aHash.foreach[k;v]{
 		$lUID[^math:uid64[]]
 		^if(!def $aParent){$aParent[NULL]}
  		^result.append{$k	$aParent	^if($v is hash){	1}{$v	0}	$lUID}
  		^if($v is hash){
  			^result.join[^_hash2table[$v;$lUID]]
  		}
  }
до кучи можно изначальную пустую таблицу генерить разово в класс, и потом при необходимости копировать:
$result[^table::create{key parent value isHash uid}]

^if(!def $tEmpty){
$tEmpty[^table::create{key parent value isHash uid}]
}
$result[^table::create[$tEmpty]]

я когда-то тестировал подобное, и копирование таблицы оказалось выгоднее, чем её создание на основании текста (и я остановился на варианте копирования), но это было давно.

- pfCache:_table2hash
^result.add[$.[$lLevel.key][$lLevel.value]]
=>
$result.[$lLevel.key][$lLevel.value]
добавлять один ключ так быстрее. да и два тоже быстрее. я тестировал :)
в варианте с .add сначала происходит создание хеша, потом его элемент(ы) переписываются. т.е. созданый хеш сразу-же становится не нужен. вариант добавления элемента сразу добавляет элемент.