【发布时间】:2013-07-05 14:43:46
【问题描述】:
我很好奇某些宏在做什么,并尝试致电(macroexpand-1) 获取更多信息。但是,我对如何扩展 ClojureScript 中的内置宏感到有些困惑,尤其是 cljs.core 命名空间中的宏。根据文档,ClojureScript 宏是用 Clojure 编写的,因此必须在 Clojure REPL(而不是 ClojureScript REPL)中进行测试,这是我一直在尝试的地方。
在我的 ClojureScript 项目目录中运行 lein repl,我已经尝试过:
=> (require 'cljs.compiler)
=> (require 'cljs.core)
=> (macroexpand-1 '(cljs.core/int 99.9))
(macroexpand-1 '(cljs.core/int 99.9))
(cljs.core/int 99.9)
为什么返回(cljs.core/int 99.9)?基于ClojureScript source,该宏不应该扩展为(bit-or ~x 0) 之类的东西吗?
当我扩展非 ClojureScript 宏时,例如 (macroexpand-1 '(when (even? 2) (println "2 is even"))),扩展似乎工作正常。
似乎我在概念上遗漏了一些东西......
【问题讨论】:
标签: clojure clojurescript