Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 15.06.2011 08:18 / 15.06.2011 08:33
1. в случае, если подразумевается неоднократные вызовы pluralize и singularize, мне кажется, что в хеши надо сразу класть объекты класса regex, чтобы они компилились один раз, а не по нескольку раз в циклах.^Inflect:irregular.foreach[key;value]{ $pattern[$value.singular^$] ^if(^str.match[$pattern][i]){ $result[^str.match[$pattern][i]{$value.plural}] $irregular(1) ^break[] } }=>
^if(^Inflect:irregular.locate(^str.match[$Inflect:irregular.singular^$][i])){ $irregular(1) $result[$Inflect:irregular.plural] }хотя наверное лучше тоже сразу конструировать объекты класса regex.
$result[^str.match[$value.regex][$value.param]{ $rep[$value.replacement] ^if(def $match.1){ $m[$match.1] $rep[^rep.match[\^$1][g]{$m}] }{ $rep[^rep.match[\^$1][g]{}] } ^if(def $match.2){ $m[$match.2] $rep[^rep.match[\^$2][g]{$m}] } $rep }]по моему можно чуть проще (без проверки на def $match.1. кстати "$2" разве не надо удалять, когда !def $match.2?):
$result[^str.match[$value.regex][$value.param]{ $rep[$value.replacement] $m[$match.1] $rep[^rep.match[\^$1][g]{$m}] ^if(def $match.2){ $m[$match.2] $rep[^rep.match[\^$2][g]{$m}] } $rep }]4. в глаза бросилось ("eq" всё-таки для строк):
^if($count eq 1){...}5. в ^Inflect:uncountable.foreach при нахождении совпадения тоже можно ^break[] делать или опять-же строки положить в table и ^locate[value;$str_lower].