2015-11-30 4 views
1

Я ожидаю следующее оценить (a < b), а также (b < c) и вернуть no.Использование `и` с заданием

a = 1 
b = 4 
c = 3 
@test = (a < b) and (b < c) 
if @test 
    puts "yes" 
else 
    puts "no" 
end 

Я не получаю такое поведение, которого я ожидаю. Он возвращает yes и, кажется, оценивает только (a < b), а не (b < c). Я думаю, проблема связана с and.

+1

Проверьте правильность работы оператора в Ruby, чтобы получить ответ. – sschmeck

+1

Это одно из немногих нарушений Рубином принципа наименьшего удивления, ИМО. –

+1

Что вы думаете? – sawa

ответ

5

Вы используете and вместо &&, поэтому на самом деле, вы настраиваете @test в результате (a<b), не (a<b) and (b<c) (= имеет более высокий приоритет, чем and, в то время как && имеет более высокий приоритет, чем =).

+0

Я только что переключил его на && и добавил добавленные круглые скобки, все еще получаю «да». Я думал, что нет никакой разницы между «и» и «&&» – Tennesseej

+3

@Tennesseej: [Демо-результат попросит отличиться] (https://repl.it/B4cv) – potashin

+2

@Tennesseej: Тогда вы сделали это неправильно. Что вам нужно, это '@test = (a