小编MON*_*A43的帖子

我可以在不使用eval的情况下编写此宏吗?

我正在尝试编写一个宏,它将在Clojure中捕获编译时错误.具体来说,我想捕获当调用并clojure.lang.Compiler$CompilerException抛出一个尚未针对该数据类型实现的协议方法时抛出的异常.

到目前为止,我有:

(defmacro catch-compiler-error [body] (try (eval body) (catch Exception e e)))

但当然,我被告知这eval是邪恶的,你通常不需要使用它.有没有办法实现这个而不使用eval

我倾向于认为这eval是合适的,因为我特别希望在运行时而不是在编译时评估代码.

lisp macros eval clojure

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

Trie 类型应该扩展哪个协议?

我正在 Clojure 中编写 Trie 数据结构的实现,并认为最好使用 defrecord 来创建我自己的类型,该类型可以重载操作集合的函数。如何确定要扩展的协议名称,以便为我的新 Trie 类型实现 conj 和其他类似功能?

types records clojure trie

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

标签 统计

clojure ×2

eval ×1

lisp ×1

macros ×1

records ×1

trie ×1

types ×1