| Новости | 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].