2015-05-31 2 views
0

Я пишу процедуру, которая сравнивает строку с списком объектов, каждая из которых может быть либо другой строкой, либо RegExp. Есть ли элегантный, рубино-ориентированный способ справиться с этим?Ruby: сопоставление строки с другим объектом, который может быть строкой или регулярным выражением

В настоящем время, я делаю что-то вроде этого:

def compare(str, thelist) 
    thelist.any? do |item| 
    case str 
     when item then true 
     else false 
    end 
    end 
end 

if compare("The String I am testing", ['I am not', /string/i]) 
    # got a match 

Это, кажется, работает достаточно хорошо, но он чувствует себя немного слишком hackerish и долго наматываются на мой вкус, так что я просто интересно, если есть лучший способ сделать это. (Я не заинтересован в использовании что-то вроде instance_of -?. Я пришел с этим решением, потому что instance_of слишком некрасиво)

Работа с Рубином 2.2.2

Заранее спасибо ...

+0

Тестирование Ty pes всегда кажется мне показателем того, что что-то не так с точки зрения дизайна, поэтому я избегаю этого, когда могу, особенно когда есть более естественный способ справиться с вещами. –

ответ

2

Это сокращенный вариант вашего подхода:

def compare(str, thelist) 
    thelist.any? { |item| item.match(str) } 
end 
+0

Хороший! ...... –

+0

Отлично. Только то, что я искал. Благодаря! –

1

можно упростить следующим образом:

def compare(str, thelist) 
    thelist.any? { |item| item === str } 
end 
+0

Это тоже трюк - спасибо! (Я принял ответ Зорана, но это так же хорошо). –

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