我正在尝试使用简单的clojurescript应用程序从localStorage中提取一个整数。我尝试的所有东西最终都尝试了某种错误的行为。
以下是我的程序,没有从本地存储初始化。我会忽略未找到密钥的情况,因为我有一个JQuery版本可以处理它来填充存储空间。此外,JQuery应用程序读取ClojureScript保存到localStorage很好。这对我有用。
快速摘要就是这样。我的消息说“自上次事件发生以来已有数天”,$ number位于一个名为“counter”的div中。我有三个按钮;一个递增计数,一个递减计数,最后一个将计数重置为零。
(ns days.core
(:require [goog.events :as events]
[goog.string :as string]
[goog.math.Integer :as int]
[goog.dom :as dom]))
(defn initial-state [] 0)
(def count (atom (initial-state)))
(defn set-counter [n]
(do (.setItem (.localStorage (dom/getWindow)) "count" n)
(dom/setTextContent (dom/getElement "counter") n)))
(defn set-button-fn [button-id f-update]
(events/listen (dom/getElement button-id)
"click"
(fn [] (do (f-update) (set-counter @count)))))
(defn start-app []
(do
(set-counter @count)
(set-button-fn "addDay" (fn [] (swap! count inc)))
(set-button-fn "decDay" (fn [] (swap! count dec)))
(set-button-fn "reset" (fn [] (reset! count 0)))))
(start-app)
当我尝试使用goog.math.Integer.fromString()强制转换为整数时,对inc的调用将在末尾追加1(7转到71和711)。对dec的调用将按照我的预期进行,数字递减(711转到710和709)。这是我试图初始化它的方式。
(defn initial-state []
(integer/fromString (.getItem (.localStorage (dom/getWindow)) "count")))
我意识到这是一个goog.math.Integer对象所以我试着在它上面调用.toNumber()。但是这和.toInt()似乎给了我一个功能。 function(){if(this.e == - 1)return-w(this).D(); else {for(var a = 0,b = 1,d = 0; d = 0?e:Ua + e) b; b = Ua}确切地返回}}。
(defn initial-state [] (.toNumber
(integer/fromString (.getItem (.localStorage (dom/getWindow)) "count"))))
Clojure似乎使用java的Integer类从一个字符串转换为一个int,甚至到了(int“1”)抛出的点,这样才有了想法。
我也尝试调用javascript的parseInt()。这就是我在JQuery版本中的做法。但是,ClojureScript调用总是会返回1.即使我的JQuery版本存储了一个由Chrome的开发人员工具证明的8。
(defn initial-state []
(.parseInt (dom/getWindow)
(.getItem (.localStorage (dom/getWindow)) "count")))
任何想法如何让字符串值表现为整数?它必须简单,但我无处可去。
答案 0 :(得分:29)
您可以通过js名称空间访问parseInt函数,如下所示:
(js/parseInt "7")
答案 1 :(得分:1)
这是一个适用于Clojure和ClojureScript的方法:
(defn- str->int [s]
#?(:clj (Integer/parseInt s)
:cljs (js/parseInt s)))
(str->int "10")
> 10
答案 2 :(得分:0)
ClojureScript方式:
(ns reader-test.core
(:require [cljs.reader :as reader]))
(reader/read-string "7") ;; 7 - integer
(reader/read-string "1.3") ;; 1.3 - non-integer number
这不仅适用于整数,也适用于任何类型。