nil || false
devuelve false
y false || nil
devuelve nil
. ¿Alguien tiene una explicación para esto?nil || falso y falso || nil en ruby
Respuesta
En Ruby, todo es una expresión, y una expresión devolverá el último valor evaluado dentro de ella.
Para ambos ejemplos, el lado izquierdo de la expresión ||
evalúa a un valor falso, por lo que Ruby luego evalúa el lado derecho y lo devuelve.
Su explicación es muy clara, ¡gracias! – user1538814
||
devuelve el resultado de la última expresión evaluada. Si evalúa el LHS y encuentra un valor true
, obtiene el LHS; de lo contrario, obtienes el RHS (no importa lo que ese RHS pueda ser).
¡Esa fue una muy buena explicación, gracias! – user1538814
Como los otros señalaron, ||
primero evalúa la expresión de la izquierda. Si es "verdadero" (cualquier cosa excepto false
o nil
), lo devuelve. De lo contrario, evalúa la expresión de la derecha y la devuelve (sin importar de qué se trate).
Esto hace que ||
para más que simplemente pruebas booleanas. Por ejemplo, acabo de utilizar el otro día al escribir algo de código para el chronic
joya:
@now = options[:now] || Chronic.time_class.now
Eso quiere decir: "si el options
de hash incluye un valor :now
, tienda que en @now
De lo contrario, caer de nuevo en Chronic.time_class.now
. como predeterminado ". Estoy seguro de que puedes pensar en muchas aplicaciones posibles en tus propios programas.
&&
es análogo: primero evalúa la expresión de la izquierda, y si se evalúa como false
o nil
, lo devuelve. De lo contrario, evalúa la expresión de la derecha y la devuelve (sin importar de qué se trate).
Esto significa &&
es también es útil para mucho más que simplemente pruebas booleanas. Puedes usarlo para exprimir dos líneas de código en una. Por ejemplo:
do_something && do_something_else
(Eso sólo funciona si usted sabe que el valor de retorno de do_something
nunca será false
o nil
!)
También puede utilizar &&
para exprimir una expresión "guardia" en el mismo línea como lo que es "guarda":
message && send_message(message)
que podría sustituir:
unless message.nil?
send_message(message)
end
Todavía estoy aprendiendo ruby, pero esto es realmente útil. – user1538814
- 1. ¿Por qué (= (vector nil) (vec nil)) devuelve falso?
- 2. Ruby Nil and Zero
- 3. En Ruby, ¿por qué una igualdad con nil ("Date.new == nil") devuelve nil?
- 4. ¿Por qué `a = a`` nil` en Ruby?
- 5. iPhone: diferencia entre nil vs Nil y verdadero vs TRUE
- 6. ¿Cuáles son las diferencias entre nil, NULL y [NSNULL nil]?
- 7. falso/FALSO - ¿alguna diferencia?
- 8. Ruby check if nil before calling method
- 9. Ruby on Rails - request.env ['HTTP_REFERER'] devuelve nil
- 10. Ruby idioma para "foo.nil?? Nil: foo.to_i"?
- 11. Form.Release + NIL
- 12. NoMethodError: undefined método `[]' por falso: FalseClass
- 13. Diferencia entre .nil ?, .blank? y .empty?
- 14. Falso compartir y pthreads
- 15. i = verdadero y falso en Ruby es cierto?
- 16. la conversión de una cadena vacía en nil en Ruby
- 17. 'True' y 'falso' en Python
- 18. Comprobación de nil en vista en Ruby on Rails
- 19. ¿Cuál es la diferencia entre falso y FALSO?
- 20. Diferencia entre guardar (falso) y guardar (: validar => falso)
- 21. NSClassFromString returns nil
- 22. NSDocumentController currentDocument return nil
- 23. iOS: SKPaymentTransactionStateRestored originalTransaction == nil
- 24. UIGraphicsGetCurrentContext parece devolver nil
- 25. _REQUIREDNAME siempre nil
- 26. UIFont fontWithName devuelve nil
- 27. NSDateComponents return nil
- 28. SKPaymentTransaction.originalTransaction.transactionReceipt is nil
- 29. Clojure not nil check
- 30. cellForRowAtIndexPath devuelve nil
Para obtener puntos de bonificación, explica por qué 'nil || falso y falso || nil' evalúa como falso – pguardiario
@pguardiario http://stackoverflow.com/questions/1840488/operator-precedence-for-and-in-ruby – x1a4