parser

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

 

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

Ответ

Misha v.3 15.06.2011 08:18 / 15.06.2011 08:33

1. в случае, если подразумевается неоднократные вызовы pluralize и singularize, мне кажется, что в хеши надо сразу класть объекты класса regex, чтобы они компилились один раз, а не по нескольку раз в циклах.

2. для irregular я-бы положил строки в table, код был-бы чуть проще:
  ^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.

3. немного избыточный код (я его отформатировал для понятности):
$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].

6. что это "([m|l])"? может надо так "([ml])"?