Ответ 1
String#start_with?
принимает произвольное количество аргументов. Вам не нужно использовать ||
.
'Silver medal'.start_with?('Bronze', 'Silver', 'Gold')
# => true
'Hello medal'.start_with?('Bronze', 'Silver', 'Gold')
# => false
У меня есть этот код
if self.name.starts_with?('Bronze') || self.name.starts_with?('Silver') ||self.name.starts_with?('Gold')
Есть ли способ передать все эти строки за один раз, а не много OR, поскольку мне, возможно, придется расширять это?
String#start_with?
принимает произвольное количество аргументов. Вам не нужно использовать ||
.
'Silver medal'.start_with?('Bronze', 'Silver', 'Gold')
# => true
'Hello medal'.start_with?('Bronze', 'Silver', 'Gold')
# => false
Нет, start_with
принимает строку или регулярное выражение.
Я нашел бы постоянно расширяющееся регулярное выражение, раздражающее.
Пока я не обнаружил, что я был совершенно не прав в соответствии с @falsetru, я бы сделал это следующим образом:
%w[Bronze Silver Gold].any? { |s| name.start_with? s }
Я бы поставил массив слов в переменную или константу (или метод, я полагаю), хотя.
Затем я поместил логику в метод, независимо от того, что это такое с name
, имя которого зависит от контекста. Это делает его тривиально проверяемым, расширяемым и инкапсулированным.
def precious_metal?
self.name.starts_with? precious_metals
end
...
if precious_metal?
# Some logic
end