Цель состоит в том, чтобы переместить каждую букву на следующую букву в алфавите, на карте, она успешно изменила букву, но как только я оттуда, значение исчезнет, кроме гласных. Как так?Array.map {| x | change value} удаляет его из массива, почему?
def LetterChanges(str)
abc = [*("a".."z")]
result = str.split(//)
result.map! do |x|
if abc.include?(x)
if x == "z"
x = "A"
else
x = abc[abc.index(x)+1]
# if you puts x here, you can see it changes value correctly
if x == "a" || x == "e" || x == "i" || x == "o" || x == "u"
x.capitalize!
end
end
end
#However here, the changed values that are not vowels disappear
# WHY is that happening, is the second if (vowel) affecting it? How?
end
puts "#{result.join}" #<--- its only putting the vowels
return result.join
end
LetterChanges("what the hell is going on?")
Что такое значение вашего блока, когда символ ('x') не в' abc'? Как насчет того, '' '' '' w''? Пройдите через код вручную или в отладчике. Или преобразовать его в лямбда ('f = lambda do | x | if abc.include? (X) ... end'), чтобы вы могли легко оценить блок в' irb' с различными входами. –
спасибо mu - если его не в abc, я хочу такое же значение, поэтому я думал, что он просто сохранит значение (x), если он не будет соответствовать ни одному из условий if. Почему этого не происходит? Что заставляет (x) потерять значение, которое потребовалось при создании? – kortes