Задать вопрос
hummingbird
@hummingbird

Почему Ruby неправильно выполняет условие?

В общем, есть такой код:
test_var = false

# тут начинается цикл do |item|

	unless test_var
		test_var = item.present?
	end

# тут заканчивается цикл


Попытался продебажить его работу:
test_var = false
array = []

# тут начинается цикл do |item|

	unless test_var
		test_var = item.present?
		array.push(test_var)
	end

# тут заканчивается цикл

render json: array


Получаю это:
[false,true,false,false]


Почему после того, как test_var стало равным TRUE, условие все равно выполняется?
  • Вопрос задан
  • 318 просмотров
Подписаться 1 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Thinknetica
    Профессиональная разработка на Ruby on Rails
    9 месяцев
    Далее
  • Хороший программист
    Интенсив по Ruby on Rails
    5 месяцев
    Далее
  • Thinknetica
    Оптимизация Ruby/Rails-приложений
    9 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
vladchernik
@vladchernik
system analyst | developer
Предполагаю (ибо в вопросе лишь кусок кода), что цикл do end у тебя не имеет какого-либо условия завершения до выполнения перебора всей коллекции. То есть твой цикл выполняется даже после завершения блока с unless, оттого и значения в массиве «не правильные».

Один очень умный человек и значимая фигура в мире ruby как-то мне сказал:
Два уровня вложенности — всегда признак того, что «что-то пошло не так».

В Ruby если не всё, то многое можно сделать элегантно, а иногда вообще одной строкой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы