Od pewnego czasu próbuję to sobie wyobrazić.Clojure "jeśli" nigdy nie ocenia swojego trzeciego argumentu.
(defn is-decimal [astr]
(if (. astr (indexOf (int \.)))
(Double/parseDouble astr)
(Integer/parseInt astr)))
To jest funkcja, którą napisałem. is-decimal
jest albo przekazywana coś takiego jak "2,5" lub "5" lub coś w tym rodzaju, ale zawsze używa drugiego argumentu if
, nigdy jego trzeciego. Przetestowałem w REPL (. astr (indexOf (int \.)))
i wygląda na to, że działa poprawnie, zwraca -1, gdy się nie uda, a 1, gdy nie. Wierzę, że to może być problem. -1 nie oznacza fałszu w Clojure. Czy ktoś może wymyślić sposób, aby to naprawić?
Z góry dziękuję.
EDIT: Dzięki za pomoc facetów. Zaraz po tym, jak to napisałem, wpadłem na pomysł. Napisałem funkcję predykatu, która sprawdza 1 i -1. Dokładnie to, czego potrzebowałem. Nie należy kodować bezpośrednio po przebudzeniu: \
Jest to jedyna rzecz, której nie lubię w Clojure, nie mam pojęcia, jaką funkcję szukam: \ – Rayne
Tak, doktorzy są dość nieliczni. Musisz usiąść i przeczytać cały API pewnego dnia. "find-doc" również pomaga. Sprawdź również http://github.com/mmcgrana/clj-doc/tree/master –
Arkusz oszustów Clojure jest również bardzo pomocny: http://clojure.org/cheatsheet – ollb