Pregunta

Me pregunto por qué Ruby le da a y , o menos prioridad que & amp; & amp; , || , y asignar operador? ¿Hay alguna razón?

¿Fue útil?

Solución

Supongo que es una transferencia directa de Perl. Los operadores o y y se agregaron más adelante en Perl 5 para situaciones específicas en las que se deseaba una prioridad más baja.

Por ejemplo, en Perl, aquí deseamos que || tenga menor prioridad, para poder escribir:

try to perform big long hairy complicated action     || die ;

y asegúrese de que || no va a engullir parte de la acción. Perl 5 introdujo o , una nueva versión de || que tiene poca prioridad, exactamente para este propósito.

Un ejemplo en Ruby donde podría usar o pero no || :

value = possibly_false or raise "foo"

Si utilizó || , sería un error de sintaxis.

Otros consejos

La diferencia es la precedencia. || , & amp; & amp; tienen mayor prioridad que = , pero y , o tener más bajo. Entonces, si bien puedes hacer:

a = nil || 0

Tendrías que hacer:

a = (nil or 0)

para obtener el mismo efecto. Si lo haces:

a = nil or 0

El resultado de la expresión seguiría siendo 0, pero un valor sería nulo.

Tienen una precedencia muy baja para que los operandos no tengan que estar entre paréntesis, como ocurre a veces con & amp; & amp; y || .

Ser capaz de controlar la precedencia de sus operadores a veces es útil, especialmente si le preocupa la legibilidad: los paréntesis adicionales en las declaraciones condicionales a veces pueden oscurecer la lógica real.

Sin embargo, para ser sincero, creo que la razón por la que Ruby tiene los niveles de precedencia de operadores booleanos se debe principalmente al hecho de que Matz era un programador de Perl antes de escribir Ruby, y tomó prestada gran parte de la sintaxis central y los operadores de ese idioma.

Creo que la idea es específicamente colocarlos debajo de los operadores de asignación, para que pueda escribir pruebas lógicas con asignaciones pero sin parens.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top