Существует простое объяснение, почему это так:
==
в Ruby является оператором, который выполняет определенную функцию. У операторов есть правила для определения того, в каком порядке они применяются - например, a + 2 == 3
оценивает сложение перед проверкой на равенство. Но одновременно оценивается только один оператор. Не имеет смысла иметь две проверки на равенство рядом друг с другом, потому что проверка на равенство оценивается как true
или false
. Некоторые языки допускают это, но это все еще не работает правильно, потому что тогда вы будете оценивать true == c
, если a
и b
равны, что, очевидно, неверно, даже если a == b == c математические термины.
Что касается более элегантного решения:
case [a,b,c].uniq.size
when 1 then :equilateral
when 2 then :isosceles
else :scalene
end
Или еще короче (но менее читабельно):
[:equilateral, :isosceles, :scalene].fetch([a,b,c].uniq.size - 1)