相关疑难解决方法(0)

Clojure - 如何在系统宏之前扩展我的宏?

如果我这样做,例如:

(defmacro qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))
Run Code Online (Sandbox Code Playgroud)

它失败是因为reify看到(qqq)而不是(toString [this] "Qqq").

通常的解决办法是,包"具体化"与我自己的事情调用宏,但它更长,更具侵入性.

如何使我的宏更强大,通常的宏首先扩展?

期待像:

(defmacro ^{:priority 100500} qqq [] '(toString [this] "Qqq"))
(reify Object (qqq))
Run Code Online (Sandbox Code Playgroud)

要么

(defmacro qqq [] '(toString [this] "Qqq"))
(expand-first #{qqq} (reify Object (qqq)))
Run Code Online (Sandbox Code Playgroud)

macros clojure

8
推荐指数
2
解决办法
966
查看次数

如何将字符串转换为clojure表达式?

我想在一个字符串中发送一个clojure表达式,以便在接收者处进行评估,这可能是一个用compojure编写的Web服务.例如,假设我有字符串"(*7 6)",我想把它变成'(*7 6),然后我可以传递给eval并得到42.这个操作在JavaScript中是微不足道的,但是不太确定如何在clojure中做到这一点.提示?

clojure

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

Clojure:如何开启Java类的Case

我在clojure中有一个java类,它来自一个返回类的方法.我想要打开这些,如下:

            (case type
                java.lang.String (println "Found String" name)
                java.lang.Long (println "Found Long" name)
                java.nio.ByteBuffer (println "Found ByteBuffer" name)
                java.lang.Boolean (println "Found Boolean" name)
                java.math.BigDecimal (println "Found BigDecimal" name)
                java.lang.Double (println "Found Double" name)
                java.lang.Float (println "Found Float" name)
                java.net.InetAddress (println "Found InetAddress" name)
                java.lang.Integer (println "Found Integer" name)
                java.util.Date (println "Found Date" name)
                java.util.UUID (println "Found UUID" name)
                java.math.BigInteger (println "Found BigInteger" name)
                java.util.List (println "Found List" name)
                java.util.Set (println "Found Set" name)
                java.util.Map (println "Found Map" name))
Run Code Online (Sandbox Code Playgroud)

但是,当我运行这个时,我得到了

 java.lang.IllegalArgumentException: …
Run Code Online (Sandbox Code Playgroud)

java clojure

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

标签 统计

clojure ×3

java ×1

macros ×1