[Ruby] Фабрика, eval или что-то еще

SoNaR sonar на scli.ru
Пн Июл 26 18:35:48 MSD 2004


Уважаемый Ruby,

  Есть такой метод:
  
    def parse( body = @mail.body )
        {
        'SEND_ME'      =>  /SEND ME (.*)/i,
        'ALIAS'        =>  /\$[a-z]+\$/i
        }.inject( [] ){ |result,i|
            key, value = i
            result += case key
                when 'SEND_ME'
                    ETALON6_SEND_ME.new( @mail.from[0], body.scan( value ) ).create_request
                when 'ALIAS'
                    ETALON6_ALIAS.new( @mail.from[0], body.scan( value ) ).create_request
                else
                    []
            end
            result
        }
    end

  Хочу избавиться от case_when, но ничего кроме eval И фабрики в
  голову не лезет.

    def parse( body = @mail.body )
        {
        'SEND_ME'      =>  /SEND ME (.*)/i,
        'ALIAS'        =>  /\$[a-z]+\$/i
        }.inject( [] ){ |result,i|
            key, value = i
            result += eval( [ self.class.to_s.split('_').last, key].join('_') ).new( @mail.from[0], body.scan( value ) ).create_request
            result
        }
    end
  
  Фабрику делать не с руки, т.к. объекты обычно по одному ходят. Может
  вообще как-то без них обойтись? Но тогда коряво получается... Чего посоветуете?

---
г.Москва, Научный центр правовой информации при Минюсте РФ

Шипиев Роман Николаевич
Начальник отдела проектирования, программирования 
и сопровождения информационных систем.

Тел: (095) 459-05-12
E-Mail: sonar на scli.ru
UIN: 289794359



Подробная информация о списке рассылки Ruby