2016-08-05 4 views
0

У меня есть следующий рубиновый блок кода:Почему, если условие возврата, когда оно ложно?

x = 1 

loop do 
    x+=1 

    next unless (x % 2) == 0 
    puts x 


    break if x >=10 
end 

My output: 
2 
4 
6 
8 
10 

Здесь пока нет (x % 2) ==0 что означает, когда оно ложно, то есть х% 2 дает остатка нечто иное, отличное от 0, то он должен делать puts, но все кратные из 2 в том числе 2 сам дает (x%2)==0 как истинный. Неужели я неверно истолковываю, если заявление или что-то еще?

ответ

2

Операция next означает возврат к началу цикла. Я думаю, это то, чего вам не хватает.

Так что если x нечетное, то (x % 2) == 0 ложно, поэтому next выполняется оператор, который заставляет программу пропустить запуск остальной части цикла. Это означает, что нечетные числа никогда не печатаются.

2

Ваш код явно говорит next unless (x % 2) == 0, который является таким же, как next unless x.even?, который является таким же, как next if x.odd?, что означает «если x нечетное, перейти к итерации следующего контура». В результате вы получите четные цифры.

+1

Методы, подобные «нечетным?», Помогают в передаче ваших намерений. '(x% 2) == 0' немного сложно обрабатывать, если вы не обращаете внимания. – tadman

Смежные вопросы