Допустим, у меня есть функция
def odd_or_even n
if n%2 == 0
return :even
else
return :odd
end
end
И у меня был простой перечисляемый массив
simple = [1,2,3,4,5]
И я прогнал его через карту с помощью моей функции, используя блок do-end:
simple.map do
|n| odd_or_even(n)
end
# => [:odd,:even,:odd,:even,:odd]
Как я мог сделать это, скажем, без определения функции в первую очередь? Например,
# does not work
simple.map do |n|
if n%2 == 0
return :even
else
return :odd
end
end
# Desired result:
# => [:odd,:even,:odd,:even,:odd]
не является допустимым ruby, и компилятор злится на меня за то, что я даже подумал об этом. Но как мне реализовать эквивалентную вещь, которая работает?
изменить
На самом деле решение моей проблемы имеет для меня гораздо меньшее значение, чем мотивация/обоснование, стоящее за ним, чтобы помочь мне лучше понять, как работают рубиновые блоки :)