我失去了暴乱比例.我无法理解.为什么平等和不平等测试以这种方式表现?
(= 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) 我在用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) 当我写一个函数检查用户可以删除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其他的方式,以避免它.
我写了一个宏:
(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并返回 …