«Что в этом нет?»
Как @ Cary Swoveland и @Lahiru уже сказал, если слово передается в том, что не имеет «U» или «е», что будет сгенерировано исключение:
001 > def vowel_indices(word)
002?> x = (word.index("u") + 1) #word.index("u") returns nil if the word arg passed in doesn't have a 'u'
003?> y = (word.index("e") + 1)
004?> print = [x,y] #I've never seen the 'print =' syntax...any reason you're not just returning [x,y] here?
005?> end
=> :vowel_indices
006 > vowel_indices("cruel")
=> [3, 4]
007 > vowel_indices("cat")
NoMethodError: undefined method `+' for nil:NilClass
from (irb):2:in `vowel_indices' # This tells you exactly where the exception is coming from
from (irb):7
from /Users/kenenitz/.rvm/rubies/ruby-2.2.0/bin/irb:11:in `<main>'
Два быстро & грязный способы обработки, это будет либо добавить условное, чтобы проверить наличие каждого письма, или вы можете спасти NoMethodError
:
#conditional check (preferred as it is more precise)
def vowel_indices(word)
u_index = word.index("u")
e_index = word.index("e")
x = u_index ? u_index + 1 : nil #verify that u_index is not nil before calling :+ method
y = e_index ? e_index + 1 : nil # same for e_index
[x,y]
end
#rescuing NoMethodError, not preferred in this case but including as a possible solution just so that you're familiar w/ this approach
def vowel_indices(word)
begin
x = word.index("u") + 1
y = word.index("e") + 1
rescue NoMethodError
x = nil
y = nil
end
[x,y]
end
при любом решении я обеспечиваю, если слово отсутствует а «и» или ' e ', возвращаемое значение будет содержать nil
, который, скорее всего, потребуется какое-то специальная обработка в другом месте в вашей программе:
vowel_indices("cat")
=> [nil, nil]
vowel_indices("cut")
=> [2, nil]
Что такое значение 'слово'? –
Слово, которое я тестирую, является «супер». Однако в переменном слове нет значения. – John
Когда я запускаю ваш код с помощью 'vowel_indices (« super »)', он отлично работает. Ошибка в другом месте. Как вы называете метод? –