Разбор строковых данных текстового поля икоты для использования в функциях Clojure

Я делаю простое веб-приложение, чтобы помочь моим друзьям-учителям подсчитывать свои оценки. У меня есть текущий бит кода, с которым я работаю ниже:

    (defn home [& [weights grades error]] 
      (layout/common
        [:h1 "Welcome to Clojure-grade"]

        [:hr]

        (form-to [:post "/"]

                 [:p "Enter the weights for your various grades below. 
                  Of course, all of the numbers should add up to 100%, as in the example, below." 
                  (text-field {:placeholder "40 10 50"} "weights" weights)]

                 [:p "Enter all of the grades for each student. 
                  Make sure that each of the grades is ordered to correspond 
                  to its matching weight above. use brackets to separate students from each other. 
                  The following example shows grades for 4 students. Format your grades according to         
                  the number of students in your class:" 
                  (text-area {:rows 40 :cols 40 :placeholder  
                              "[89 78 63]
                               [78 91 79]
                               [54 85 91]
                              ..."  } "grades" grades)]
                 (submit-button "process"))))

(defn process-grades [weights grades]
    (->> (float grades)
         (map (partial percentify-vector (float weights)))
         (mapv #(apply + %))))

(defroutes app
  (GET "/" []
       {:status 200
        :headers {"Content-Type" "text/html"}
        :body home})
  (POST "/" [weights grades] (process-grades weights grades))
  (ANY "*" []
       (route/not-found (slurp (io/resource "404.html")))))

(defn wrap-error-page [handler]
  (fn [req]
    (try (handler req)
         (catch Exception e
           {:status 500
            :headers {"Content-Type" "text/html"}
            :body (slurp (io/resource "500.html"))}))))

Я предполагаю, что данные будут привязаны к соответствующим символам weights и grades в виде строк. Однако мне нужно убрать эти кавычки, чтобы использовать числа с плавающей запятой и векторы в моих вычислительных функциях. Как я могу это сделать? Я тоже новичок в этом, поэтому, если в моем коде есть какие-либо ошибки или я делаю что-то не так, пожалуйста, дайте мне знать. Кроме того, если вам нужна дополнительная информация о пространстве имен или файле project.clj, спросите, и я расскажу.


person kurofune    schedule 22.02.2014    source источник


Ответы (1)


Вы можете использовать java interop для преобразования строк в числа с плавающей запятой или целые числа, но идиоматическим способом является использование строки чтения

(process-grades
    (read-string weights)
    (read-string grades))
person KobbyPemson    schedule 22.02.2014
comment
Я ценю вашу помощь в этом. Я добавил предложения, которые вы мне дали, но они все равно не отображаются. У меня сейчас другая проблема. Это немного отличается, поэтому я задал здесь новый вопрос: ссылка . Пожалуйста, посмотрите. - person kurofune; 23.02.2014