小编rbb*_*rbb的帖子

什么时候应该使用交换或重置

使用swap!reset!在Clojure函数之间有什么区别?我从clojure.core文档中看到它们用于改变原子的值,但我不确定何时使用swap!以及何时使用reset!.

你会在什么情况下使用swap!以及你会使用哪种情况reset!

[:input {:type "text"
         :value @time-color
         :on-change #(reset! time-color (-> % .-target .-value))}]
Run Code Online (Sandbox Code Playgroud)

上面的代码是reset!用于按钮的示例

[:input.form-control
          {:type      :text
           :name      :ric
           :on-change #(swap! fields assoc :ric (-> % .-target .-value))
           :value     (:ric @fields)}]
Run Code Online (Sandbox Code Playgroud)

而这个按钮使用 swap!

swap!reset!互换?

谢谢

clojure

13
推荐指数
1
解决办法
2038
查看次数

Heroku - 在"主要"中使用Stuart Sierra组件错误的Clojure App

我正在尝试在我的heroku dyno上开始我的clojure应用程序,但我在stuartsierra.component/start中继续得到错误.

(defrecord Listener [listener]
  component/Lifecycle
  (start [component]
    (assoc component :listener (yada/listener
                                 ["/"
                                  [(view/view-route)
                                   routes/route-handler
                                   ["public/" (new-directory-resource (io/file "target/cljsbuild/public") {})]
                                   [true (as-resource nil)]]]
                                 (or (env :port) (get (read-config "resources/config.edn" {:profile :dev}) :webserver))
                                 )))
  (stop [component]
    (when-let [close (-> component :listener :close)]
      (close))
    (assoc component :listener nil)))

(defn new-system []
  (component/system-map
    :listener (map->Listener {})
    ))

(def system nil)

(defn init []
  (alter-var-root #'system
                  (constantly (new-system))))

(defn start []
  (alter-var-root #'system component/start))

(defn stop []
  (alter-var-root #'system
                  (fn [s] (when s (component/stop …
Run Code Online (Sandbox Code Playgroud)

clojure heroku

9
推荐指数
1
解决办法
221
查看次数

莱因·菲格比vs莱因cljsbuild自动

lein figwheel和lein cljsbuild auto有什么区别,因为我相信它们都可以用来编译clojurescript。

另外,使用一个比另一个有好处吗?

clojurescript cljsbuild figwheel

5
推荐指数
1
解决办法
549
查看次数

Clojure - 将函数应用于向量向量

我有一个矢量[[[1 2] [3 4]] [[5 6] [7 8]] [9 10] 11].我想将一个函数应用于此向量,但保留数据结构.

例如,我想为每个数字添加1,但保留数据结构以获得结果[[[2 3] [4 5]] [[6 7] [8 9]] [10 11] 12].这可能吗?

我试过了

(map #(+ 1 %) (flatten [[[1 2] [3 4]] [[5 6] [7 8]] [9 10] 11]))
=> (2 3 4 5 6 7 8 9 10 11 12)
Run Code Online (Sandbox Code Playgroud)

但是你可以看到数据结构不一样.

有没有可能,需要一个函数(2 3 4 5 6 7 8 9 10 11 12)[[[2 3] [4 5]] [[6 7] [8 9]] [10 11] 12] …

clojure

5
推荐指数
1
解决办法
197
查看次数

Clojure.spec - 为什么它有用,什么时候使用它

我最近在Cojure Conj 2016上观看了Rich Hickeys的演讲,尽管它非常有趣,但我并没有真正理解clojure.spec你使用它的重点.似乎大多数想法,例如符合,有效等,已经在Clojure中具有类似的功能.

我现在只学习了大约3个月的clojure,所以这可能是由于缺乏编程/ Clojure经验.

clojure.spec和cljs.spec的工作方式与Clojure和Cljs类似,尽管它们不是100%相同,但它们基于相同的基本原则.

clojure clojure.spec

4
推荐指数
2
解决办法
781
查看次数

Clojure - 仅从时间字符串中获取小时数

我有时间字符串"2017-08-30 09:01:48".有没有办法将时间缩短到最近的小时并返回小时?

所以,如果时间"2017-08-30 09:01:48"会回来9

如果时间"2017-08-30 09:51:48"会回来10

我看了看图书馆,clj-time但我看不到任何可以帮助我的东西

任何帮助将非常感激?

clojure

3
推荐指数
1
解决办法
349
查看次数

Clojure - Postgres 未找到合适的驱动程序

我已将我的 postgres 数据库定义为

(def db {:subprotocol "postgresql"
         :subname "//localhost:5432/mydb"
         :user "admin"
         :password "password"})
Run Code Online (Sandbox Code Playgroud)

我还定义了一个函数

(defn get-users []
  (sql/query db ["select * from users"]))
Run Code Online (Sandbox Code Playgroud)

sql在哪里 [clojure.java.jdbc :as sql]

如果我运行,(get-users)我会收到错误

SQLException No suitable driver found for jdbc:postgresql://127.0.0.1:5432/mydb  java.sql.DriverManager.getConnection (DriverManager.java:689)
Run Code Online (Sandbox Code Playgroud)

我从其他 Java 帖子中看到我需要使用加载驱动程序 Class.forName("org.postgresql.Driver");

1)这是什么意思?

2) 我如何做到这一点/解决我在 Clojure 中的错误?

postgresql clojure

2
推荐指数
1
解决办法
1641
查看次数

Clojure - 将所有整数返回到某个数字的函数

我想创建一个函数,当你输入一个数字说5它将返回一个从1到5的所有数字的向量,即[1 2 3 4 5]

到目前为止,我在

    (defn counter [number]
      (let [x 1
            result []]
       (when (<= x number)
        (conj result x)
        (inc x))))
Run Code Online (Sandbox Code Playgroud)

现在它将1放入向量中,但我想现在说(inc x)并再次运行.我必须使用复发吗?

任何帮助深表感谢

clojure

2
推荐指数
1
解决办法
247
查看次数

Clojure - 按索引合并两个列表

我如何组合两个列表说'(1 2 3 4)'(:a :b :c :d)得到 (1 :a 2 :b 3 :c 4 :d)

因为我不能这样做,concat因为这会将第二个列表添加到第一个列表的末尾.

我想过做点什么

user=> (def a '(1 2 3 4))

user=> (def b '(:a :b :c :d))

user=> (def x (apply conj (second (split-at 1 a)) (nth b 0) (reverse (first (split-at 1 a)))))
(1 :a 2 3 4)

user=> (def y (apply conj (second (split-at 3 x)) (nth b 1) (reverse (first (split-at 3 x)))))
(1 :a 2 :b …
Run Code Online (Sandbox Code Playgroud)

clojure

2
推荐指数
1
解决办法
297
查看次数

将函数应用于散列映射的多个值并将结果返回到数组中

我有一个定义:

(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)

我想要的结果是一个看起来像的矢量

[["John" "25"]
 ["Harry" "23"]
 ["Peter" "24"]]
Run Code Online (Sandbox Code Playgroud)

如果我打电话(map (-> class1 :people) [:name :age]) 然后我得到结果("彼得""24").为什么我只从最后一个hashmap而不是其他hashmap获取值?

如果我然后打电话(into [] (map (-> class1 :people) [:name :age])) 然后我得到结果["彼得""24"]

我需要做的是into在另外两个哈希映射上再次运行该函数,然后将3个结果放入向量中,但我不知道如何做到这一点.

我的问题是,当我运行时(map (-> class1 :people) [:name :age]),我得到最后一个哈希图.我相信你必须做一些事情,比如在每个哈希映射上运行一个函数,一次一个,然后每次将该向量放到另一个向量中以获得我正在寻找的表单.

任何帮助将非常感激

clojure

1
推荐指数
1
解决办法
157
查看次数