He estado tratando de entender esto desde hace un tiempo.Clojure 'si' nunca evaluando su tercer argumento
(defn is-decimal [astr]
(if (. astr (indexOf (int \.)))
(Double/parseDouble astr)
(Integer/parseInt astr)))
Esa es la función que escribí. is-decimal
o se pasa algo como "2.5" o "5" o algo por el estilo, pero siempre usa el segundo argumento de if
, nunca el tercero. Probé (. astr (indexOf (int \.)))
en el REPL, y parece estar funcionando bien, devuelve -1 cuando falla y 1 cuando no funciona. Creo que ese podría ser el problema. -1 no significa falso en Clojure. ¿Alguien puede pensar en una forma de solucionar esto?
Gracias de antemano.
EDIT: Gracias por la ayuda chicos. Justo después de escribir esto, tuve una idea. Escribí una función de predicado que busca 1 y -1. Justo lo que necesitaba. No debería código directamente después de despertarse: \
Esto es lo único que odio de Clojure, no tengo manera de saber qué función estoy buscando: \ – Rayne
Sí, los documentos son bastante escasos. Tienes que sentarte y leer todo el API un día. 'find-doc' también ayuda. También consulte http://github.com/mmcgrana/clj-doc/tree/master –
La hoja de trucos de Clojure también es muy útil: http://clojure.org/cheatsheet – ollb