2013-07-27 1 views
0

Im рубин начинающих и очень разочарованы с этим кодом:рубин два сравнения в исключением случаев, когда

unless ((f[-4..-5] == '.png') || (f[-4..-5] == '.jpg')) 

Как-то второе сравнение не распознается рубин! Что не так?

+0

что вы имеете в виду под "не распознан"? и что вы ожидаете от кода? –

+0

Не работает! Извините –

+1

Что вы пытаетесь сделать? f [-4 ..- 5] всегда будет пустой строкой/массивом (в зависимости от того, с чего начинался f) –

ответ

7

Я думаю, вы должны использовать f[-4..-1] вместо f[-4..-5].

Или вы можете использовать регулярные выражения:

unless f =~ /\.(png|jpg)$/ 

или использовать String#end_with?:

unless f.end_with?('.png', '.jpg') 
+0

@squiguy, Спасибо за комментарий. Я это исправил. – falsetru

+0

'если f [/ \. (?: jpe? | Pn) g $ /]'. Некоторые приложения создают файлы 'jpeg', и многие из них существуют в дикой природе. «jpg» - это расширение, которое я вижу с помощью «современных» приложений. –

4

f[-4..-5] будет пустой строкой, которая никогда не будет соответствовать '.png'. Таким образом, второй член вашей дизъюнкции никогда не будет оценен.

Если вы кондиционирование расширения файла, то вы можете сделать это:

case File.extname(f) 
when ".png", ".jpg" 
else 
    ... 
end 
+0

О, мужчина! Мой мозг в праздниках спасибо! –

0

Как показано ниже:

ext_nm = File.extname(f) 
unless [".png", ".jpg"].include? ext_nm 
+0

Вы должны назначить 'File.extname (f)' переменной, иначе каждая итерация по массиву заставит перераспределить расширение. Это пустая трата времени процессора. –

+0

@theTinMan ваш канал всегда приветствуется для меня ... как я здесь, чтобы узнать ..так, я обновил код ...: D –

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