clojure - 如何从本地存储中提取整数并使用 clojurescript 强制转换为整数

标签 clojure google-closure-library clojurescript

我正在尝试使用一个简单的 clojurescript 应用程序从 localStorage 中提取一个整数。我尝试过的一切最终尝试都有某种错误的行为。

下面是我的程序,没有从本地存储初始化。我将忽略 key not found 的情况,因为我有一个 JQuery 版本来处理它以准备存储。此外,JQuery 应用程序读取 ClojureScript 保存到 localStorage 很好。所以这对我有用。

快速总结是这样的。我的消息说“自上次事件以来已经有 $number 天了” $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() 。但是 this 和 .toInt() 似乎给了我一个功能。函数 (){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}return a}} 准确地说。
(defn initial-state [] (.toNumber 
  (integer/fromString (.getItem (.localStorage (dom/getWindow)) "count"))))

Clojure 似乎使用 java 的 Integer 类从字符串转换为 int 甚至到了 (int "1") throw 这样的想法。

我还尝试调用 javascript 的 parseInt()。这就是我在 JQuery 版本中的做法。然而 ClojureScript 调用总是返回 1。即使我的 JQuery 版本存储了 8,正如 Chrome 的开发人员工具所证明的那样。
(defn initial-state []
  (.parseInt (dom/getWindow)
             (.getItem (.localStorage (dom/getWindow)) "count")))

任何想法如何让该字符串值表现为整数?它必须很简单,但我无处可去。

最佳答案

您可以通过 js 命名空间访问 parseInt 函数,如下所示:

(js/parseInt "7")

关于clojure - 如何从本地存储中提取整数并使用 clojurescript 强制转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6838776/

相关文章:

javascript - 交付 ClojureScript 桌面应用程序的最正常方式是什么

Clojurescript - 来自 subvecs 列表的映射

clojure - 将元素添加到嵌套树结构中的向量

clojure - 在 Clojure 中导入什么 -?> ?

javascript - 使用 Google Closure Library 防止事件传播

javascript - 无需编译即可访问闭包库中的 `goog.require` d 对象

clojure - 用于播放声音的 Clojure 友好库

clojure - 为什么字符串格式化会导致转换异常?

css - 如何在 Google Closure Library 富文本编辑器中设置默认字体

javascript - clojurescript 相当于 javascript 的模块模式