2013-02-19 3 views
0

У меня есть функция, где я передать строку и возможность использовать его в качестве регулярного выражениявызова метода в зависимости от вариантов (лучший способ реорганизовать)

def regexp_this?(string, arg1, arg2, regx = false) 
    if regx 
    method1 %r{#{string}:someconstantstring} 
    method2 %r{#{string}:someconstantstring:#{arg1}} 
    method3 %r{#{string}:someconstantstring:#{arg1}:anotherconstant:#{#arg2}} 
    else 
    method1 "#{string}:someconstantstring" 
    method2 "#{string}:someconstantstring:#{arg1}" 
    method3 "#{string}:someconstantstring:#{arg1}:anotherconstant:#{#arg2}" 
    end 
end 

method1, method2 и method3 призывы expire_fragment. Я создаю кеш, основанный на текущем состоянии страницы. Если arg1 или arg2 объявлен или нет, у меня есть разные ключи кеша, которые мне нужно закончить.

Есть ли способ реорганизовать это?

+0

Вы должны сказать, что '' method1', method2' и 'method3' сделать. Вы также должны указать, если 'regex' означает булевский флаг. Это дополнительная работа, чтобы догадаться об этом. – sawa

+0

они фактически звонки на expire_fragment. Я создаю кеш, основанный на текущем состоянии страницы. если arg1 или arg2 объявлен или нет, у меня есть разные ключи кеша, которые мне нужно закончить. – jvnill

ответ

2

Для условно, по крайней мере, вы должны быть в состоянии сделать что-то вроде этого:

def regexp_this?(string, arg1, arg2, regx = false) 
    # Select whether you want a String or Regexp parameter. 
    argument_klass = (regx ? Regexp : String) 

    method1 argument_klass.new("#{string}: ...") 
    method2 argument_klass.new("#{string}: ...") 
    method3 argument_klass.new("#{string}: ...") 
end 
+0

Я думаю, что у вас есть свое условное отставание. –

+0

Спасибо, Андрей. Исправлено. – kristinalim

0

У вас есть несколько обязанностей по одному методу, отделите их и назовите их соответствующим образом. У вас есть проверка регулярных выражений, несколько аргументов и несколько методов в методе. Рекомендую прочитать the SOLID principles.

+0

lol почему это проголосовало. Я думал, что это хороший ответ. – TakaGoto

Смежные вопросы