Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的clojurescript宏不起作用_Clojure_Macros_Lisp_Clojurescript_Leiningen - Fatal编程技术网

为什么我的clojurescript宏不起作用

为什么我的clojurescript宏不起作用,clojure,macros,lisp,clojurescript,leiningen,Clojure,Macros,Lisp,Clojurescript,Leiningen,我需要类似于clojure/core的when not empty let宏。因此,我刚刚添加了非空呼叫: 还将绑定0替换为第一个绑定,因为它不会以其他方式编译 我使用它的方式如下: (defn something [] (when-not-empty-let [foo ["foo"]] (.log js/console foo))) (something) 我得到以下输出: 未定义 检查 我做错了什么 使用Clojure v1.9.0构建,Clojure

我需要类似于clojure/core的when not empty let宏。因此,我刚刚添加了非空呼叫:

还将绑定0替换为第一个绑定,因为它不会以其他方式编译

我使用它的方式如下:

(defn something
  []
  (when-not-empty-let [foo ["foo"]]
    (.log js/console foo)))

(something)
我得到以下输出:

未定义

检查

我做错了什么

使用Clojure v1.9.0构建,ClojureScript:v1.10.126,lein cljsbuild:v1.1.7

在Ubuntu下的Chrome v59.0.3071.115中测试

UPD:jsbin,它至少为我复制了问题:

请参阅浏览器开发人员工具控制台中问题的输出。

来自:

对于何时可以使用defmacro,有一个严格的规则——您只能在我们称之为宏名称空间的地方使用它,这实际上迫使您将编译时代码和运行时代码分开


错误是我试图在同一命名空间中测试宏。

无法复制,至少使用Clojure。我怀疑Cljs行为的差异会导致这种情况。您的输出似乎也没有意义。应立即进行检查,然后再进行未定义检查。如果您在检查后没有得到任何结果,那么未定义的内容似乎是无关的,实际上您根本没有得到任何输出。将打印更改为println后,在Clojure中运行此命令,我得到一个在它们之间换行的outout check[foo]。绑定分配也可以减少为使用解构让[[form tst]绑定]。这里没有问题,但它看起来更漂亮了。@Carcigenicate感谢您的参与,我已经更新了问题并链接到了jsbin,请查看。我不确定jsbin是怎么回事。输出只显示一个像素值,console出于某种原因显示扩展的宏,但不显示运行代码。@Carcigenicate这是迄今为止我发现的最好的小提琴手,不幸的是,您应该打开浏览器开发工具以查看实际日志,通常是F12/控制台部分
(defn something
  []
  (when-not-empty-let [foo ["foo"]]
    (.log js/console foo)))

(something)