2016-06-06 2 views
0

Я программист неофит, поэтому прошу прощения, если это проще, чем кажется. Я искал вокруг и нашел только индивидуальные ответы для each_with_index и условий, а не вместе.Условие every_with_index условие ruby ​​

Моя цель - выполнить итерацию по массиву и выполнить одно действие на основе индекса. Мой первый проект выглядел примерно так:

@word_array.each_with_index do |word, index| 
    if index % 2 == 0 
    word = "EVEN" 
    end 
end 

Что работает, но тогда я хотел реорганизовать его в одну строку. Моя первая попытка вызова ошибки из-за него предвидя еще : часть условия:

@word_array.each_with_index { |word, index| index % 2 == 0 ? word = "EVEN" } 

Я попробовал этим способ первый думать, что я, возможно, немного удачи является таким, как блок не требует else состояния, но очевидно, безрезультатно. Я обнаружить, я мог бы использовать nil в качестве заполнителя и есть код работы:

@word_array.each_with_index { |word, index| index % 2 == 0 ? word = "EVEN" : nil } 

Однако даже после дальнейшего чтения на каждой части я нахожусь решаясь или не имея nil там потенциально может вызвать проблемы в более сложных даже если это не мешает моему основному примеру.

Так разбить его на два вопроса:

1.) является nil собирается укусить меня в заднице позже?

2.) Если да, то есть ли способ обойти это с помощью одной строки или лучше всего придерживаться условного блока?

+0

Почему бы не 'index% 2 == 0 и word = 'EVEN''? Тернар '? ..: 'для сценариев A/B, а не только A. – tadman

ответ

2

Если вы хотите, чтобы это один-лайнер стиль:

word = 'EVEN' if index % 2 == 0 

Использование трехкомпонентной с отсутствующим состоянии оставляет людей интересно, почему вы не сделали это в первую очередь. Тройное это отличный способ расшириться, как:

(index % 2 == 0) ? 'EVEN' : word 
+0

Это первое, что я и искал. Спасибо огромное! –

3
@word_array.each_with_index { |word, index| (index % 2 == 0) ? word = "EVEN" : nil } 

должен работать. Тройной оператор легко путать.

1.) Неужели ноль укусит меня в задницу позже?

Да. Почему нет:

@word_array.each_with_index { |word, index| word = (index % 2 == 0) ? "EVEN" : "ODD" } 
Смежные вопросы