小编ipa*_*ian的帖子

为什么clojure clojure.lang.Ratio 3/2 not = 1.5

我失去了暴乱比例.我无法理解.为什么平等和不平等测试以这种方式表现?

(= 3/2 1.5)
;; false
(>= 3/2 1.5)
;; true
(> 3/2 1.5)
;;false
(not= 3/2 1.5)
;; true
Run Code Online (Sandbox Code Playgroud)

math clojure

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

如何通过 clojure.tools.logging 记录哪个是像 pprint 那样的漂亮打印?

我在用org.clojure/tools.logging。我想要一个可以很好地打印日志的函数,但我找不到它。例如我要打印的内容是

{:status 401,
 :headers {"Content-Type" "application/octet-stream"},
 :body {:error "You don't login."}}
Run Code Online (Sandbox Code Playgroud)

但我调用函数名称是info,我明白了

{:status 401, :headers {Content-Type application/octet-stream}, :body {:error You don't login.}}
Run Code Online (Sandbox Code Playgroud)

logging clojure pprint

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

如何避免在clojure中嵌套

当我写一个函数检查用户可以删除clojure的帖子时,我明白了

(defn delete!
  {:arglists}
  [^String id]
  (if (valid-number? id)
   (let [result {:code 200 :status "error" :messag "delete success"}]
     (if-let [user (session/get :userid)]
       (if-let [post (pdb/id id)]
         (if (= user (post :user_id))
           (do
             (pdb/delete! (Long/valueOf id))
             (assoc result :status "ok"))
           (assoc result :message (emsg :not-own)))
         (assoc result :message (emsg :post-id-error))))
     (assoc result :message (emsg :not-login)))))
Run Code Online (Sandbox Code Playgroud)

所以我想解决它,我明白了

https://github.com/4clojure/4clojure/blob/develop/src/foreclojure/register.clj#L27

https://github.com/4clojure/4clojure/blob/develop/src/foreclojure/utils.clj#L32 但它是行,但不是巢.

delete!功能是巢丑陋,这是很难理解它,如何编写一个宏来避免嵌套一个lot.or其他的方式,以避免它.

clojure

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

功能打印在clojure中有bug吗?

我写了一个宏:

(defmacro te
  [a b & c]
  `(print
     ~(a b c)))
Run Code Online (Sandbox Code Playgroud)

并运行

(te print 2 inc 4)
Run Code Online (Sandbox Code Playgroud)

得到了一个错误 ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/eval8010 (form-init8519408738377285198.clj:1)

然后我跑

(macroexpand-1 '(te print 2 3 4)
;=> (clojure.core/print (3 4))
Run Code Online (Sandbox Code Playgroud)

这意味着(print 2 (3 4))回归(3 4)?功能print有bug吗?

我的clojure版本1.7.0,JVM版本1.8.0_65-b17


更新

好的,举例不容易理解这个例子.

即使我跑了

(te print 2 inc 4)

user=> (te print 2 inc 4)
;=> 5nil

user=> (macroexpand-1 '(te print 2 inc 4))
;=> (clojure.core/print (inc 4))
Run Code Online (Sandbox Code Playgroud)

它会打印5并返回 …

macros eval clojure

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

标签 统计

clojure ×4

eval ×1

logging ×1

macros ×1

math ×1

pprint ×1