2011-03-11 14 views
9

que tienen una función similar a la siguiente:|| Operador, ¿regresa cuando se conoce el resultado?

def check 
    return 2 == 2 || 3 != 2 || 4 != 5 
end 

Mi pregunta es, Rubí realizar todas las comparaciones a pesar de que el primero es cierto, y por lo tanto la función de retorno verdadera. Mis cheques son mucho más intensivos, por lo que me gustaría saber si debería dividir esto de una manera diferente para evitar hacer todos los controles cada vez.

irb(main):004:0> 2 == 2 || 3 != 2 || 4 != 5 
=> true 

Gracias.

+2

BTW: No necesita el 'retorno' en su método. – sepp2k

Respuesta

0

Tan pronto como una de las condiciones sea verdadera, la función volverá.

11

Ruby usa short-circuit evaluation.

Esto se aplica a ambos || y & &.

  • Con ||, el operando de la derecha no se evalúa si el operando de la izquierda es verdadero.
  • Con &&, el operando derecho no se evalúa si el operando de la izquierda es falso.
5

|| cortocircuitos tan pronto como la primera condición es verdadera. Entonces, sí, ayudará si coloca las condiciones más costosas al final.

2

|| por defecto evaluará el cortocircuito, lo que significa que una vez que se encuentre la primera expresión "verdadera", detendrá la evaluación (a menos que indique explícitamente que desea que todas las expresiones se evalúen con el operador 'o').

referencia:

http://en.wikipedia.org/wiki/Short-circuit_evaluation

0

puede comprobarlo usted mismo en el IRB, así:

irb> p('Hello') || p('World') 

Como sabemos la función p imprime sus parámetros (de forma inspect) y luego vuelve ellos, por lo que si se producen || cortocircuitos, solo se imprime "Hello"; de lo contrario, se imprimen "Hello" y "World".

También puede probar la && operador lógico, mediante el uso de puts en lugar de p, como puts siempre devuelve nil.

BTW, irb es un lugar perfecto para jugar en ruby. Puede probar todo allí, excepto una pequeña porción de concurrencia.

Cuestiones relacionadas