Precedência dos operadores em Ruby
O Ruby é, sem dúvida, uma linguagem interessante. Tenho observado algumas peculiaridades que não me lembro de ter visto em outras linguagens. Uma dessas peculiaridades é a precedência de operadores, mais especificamente em relação aos operadores lógicos.
O Ruby dispõe duas formas de se fazer uma comparação lógica. Por exemplo, você pode usar && ou and, || ou or e ! ou not. No fundo, as operações são iguais, mas a diferença está na precedência desses operadores. Os operadores &&, || e ! têm maior precedência sobre os operadores and, ou e not. Dessa forma, o bloco a seguir não funcionaria se colocássemos && no lugar de and. Se fizéssemos isso, o Ruby primeiro faria a comparação entre f(x) e b para depois atribuir o resultado a a e não o contrário, como era esperado.
if a = f(x) and b = f(y) and c = f(z) then puts "Resultado" end