2012-03-08 14 views

Respuesta

8

No, los dos operadores tienen el mismo efecto pero diferente prioridad.

El operador || tiene una precedencia muy alta, por lo que se une muy estrechamente al valor anterior. El operador or tiene una precedencia muy baja, por lo que se une con menos fuerza que el otro operador.

El motivo para tener dos versiones es exactamente que tiene una alta precedencia y el otro tiene baja precedencia, ya que es conveniente.

+0

por lo que si la primera instrucción se evaluará a algo así como ("[" || line.strip.empty?) = "[" Y luego (line.start_with? "["). – surajz

+1

Exactamente. La precedencia es una forma de adivinar lo que quería decir cuando lo deja de lado, por ejemplo, corchetes. Al igual que la precedencia matemática funciona. –

1

Daniel es correcto, con mayor claridad:

if (line.start_with?("[") || line.strip.empty?) 
    puts "yes" 
end 

producirá yes

3

En el primer caso que utilizó || wich se evalúa antes que cualquier otra cosa en el estado debido a la precedencia así ha dicho en otras answeres, por lo que es más clara con algún paréntesis añadió, su primera declaración es como:

(line.start_with? ("[" || line.strip.empty?)) 

wich se traduce en

(line.start_with? ("[")) 

resultando FALSO

En el otro lado, su segunda declaración se traduce en

((line.start_with? "[") or line.strip.empty?) 

wich se traduce en

(FALSE or TRUE) 

resultante verdadera

Por eso trato de usar cada paréntesis que llamo una función. :-)