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, условие все равно выполняется?
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 1
vladchernik
@vladchernik
system analyst | developer
Предполагаю (ибо в вопросе лишь кусок кода), что цикл do end у тебя не имеет какого-либо условия завершения до выполнения перебора всей коллекции. То есть твой цикл выполняется даже после завершения блока с unless, оттого и значения в массиве «не правильные».

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

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

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

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