2015-01-22 11 views

Odpowiedz

19

String#start_with? przyjmuje dowolną liczbę argumentów. Nie musisz używać ||.

'Silver medal'.start_with?('Bronze', 'Silver', 'Gold') 
# => true 
'Hello medal'.start_with?('Bronze', 'Silver', 'Gold') 
# => false 
+1

Nie miałem pojęcia, i podobno tak było, ponieważ powinienem wiedzieć lepiej! –

+0

doskonały, nigdy tego nie próbowałem! –

1

Nie, start_with pobiera ciąg lub regex.

Uświadomiłem sobie, że irytujące jest stale rozszerzające się wyrażenie.

Do odkryłem byłem totally wrong as per @falsetru, bym to zrobił tak:

%w[Bronze Silver Gold].any? { |s| name.start_with? s } 

bym umieścić tablicę słów do zmiennej lub stałej (lub metody, jak sądzę), choć.

Następnie umieściłbym logikę w metodzie, niezależnie od tego, jaka jest właściwość name, której nazwa zależy od kontekstu. To sprawia, że ​​jest to trywialnie testowalne, rozszerzalne i hermetyzowane.

def precious_metal? 
    self.name.starts_with? precious_metals 
end 

... 

if precious_metal? 
    # Some logic 
end 
Powiązane problemy