如果您有下面的代码,
(ns foo.core
(:require [cljs.test])
(:require [clojure.string]))
它将触发“每个命名空间定义只允许一个 :require 表达式”的诊断。
但是,如果您使用行内宏规范语法,则此诊断将被绕过
(ns foo.core
(:require [cljs.test :refer-macros [deftest]])
(:require [clojure.string]))
这导致编译器出现以下错误
clojure.lang.ExceptionInfo: 仅支持 :as, :refer 和 :rename 选项在 :require / :require-macros 中;受影响的规范:[cljs.test :refer-macros [deftest]] 的第 1 行 <cljs repl> {:file "<cljs repl>", :line 1, :column 1, :root-source-info {:source-type :fragment, :source-form (ns foo.core (:require [cljs.test :refer-macros [deftest]]) (:require [clojure.string]))}, :tag :cljs/analysis-error}
at clojure.core$ex_info.invokeStatic(core.clj:4617)
at cljs.analyzer$error.invokeStatic(analyzer.cljc:693)
at cljs.analyzer$error.invoke(analyzer.cljc:693)
at cljs.analyzer$error.invokeStatic(analyzer.cljc:695)
at cljs.analyzer$basic_validate_ns_spec.invokeStatic(analyzer.cljc:2256)
at cljs.analyzer$parse_require_spec.invokeStatic(analyzer.cljc:2344)
at cljs.analyzer$parse_require_spec.invoke(analyzer.cljc:2343)
at clojure.lang.AFn.applyToHelper(AFn.java:171)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invokeStatic(core.clj:652)
at clojure.core$partial$fn__4765.doInvoke(core.clj:2534)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$map$fn__4785.invoke(core.clj:2644)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.Cons.next(Cons.java:39)
at clojure.lang.RT.boundedLength(RT.java:1749)
at clojure.lang.RestFn.applyTo(RestFn.java:130)
at clojure.core$apply.invokeStatic(core.clj:650)
at cljs.analyzer$fn__2052$fn__2062.invoke(analyzer.cljc:2622)
at clojure.core.protocols$fn__6755.invokeStatic(protocols.clj:167)
at clojure.core.protocols$fn__6755.invoke(protocols.clj:124)
at clojure.core.protocols$fn__6755$G__6705__6719.invoke(protocols.clj:19)
at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
at clojure.core.protocols$fn__6738.invokeStatic(protocols.clj:75)
at clojure.core.protocols$fn__6738.invoke(protocols.clj:75)
at clojure.core.protocols$fn__6684$G__6679__6697.invoke(protocols.clj:13)
at clojure.core$reduce.invokeStatic(core.clj:6545)
at cljs.analyzer$fn__2052.invokeStatic(analyzer.cljc:2575)
at cljs.analyzer$fn__2052.invoke(analyzer.cljc:2556)
at clojure.lang.MultiFn.invoke(MultiFn.java:251)
at cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:3333)
at cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:3336)
at cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:3361)
at cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3530)
at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3577)
at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3603)
在 cljs.repl$evaluate_form$__GT_ast__6169.invoke(repl.cljc:471)
在 cljs.repl$evaluate_form.invokeStatic(repl.cljc:472)
在 cljs.repl$eval_cljs.invokeStatic(repl.cljc:631)
在 cljs.repl$eval_cljs.invoke(repl.cljc:618)
在 cljs.repl$repl_STAR_$read_eval_print__6300.invoke(repl.cljc:880)
在 cljs.repl$repl_STAR_$fn__6306$fn__6315.invoke(repl.cljc:922)
在 cljs.repl$repl_STAR_$fn__6306.invoke(repl.cljc:921)
在 cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1252)
在 cljs.repl$repl_STAR_.invokeStatic(repl.cljc:882)
在 cljs.repl$repl.invokeStatic(repl.cljc:1001)
在 cljs.repl$repl.doInvoke(repl.cljc:933)
在 clojure.lang.RestFn.invoke(RestFn.java:410)
在 cljs.repl.node$_main.invokeStatic(node.clj:234)
在 cljs.repl.node$_main.invoke(node.clj:233)
在 clojure.lang.Var.invoke(Var.java:375)
在 clojure.lang.AFn.applyToHelper(AFn.java:152)
在 clojure.lang.Var.applyTo(Var.java:700)
在 clojure.core$apply.invokeStatic(core.clj:646)
在 clojure.main$main_opt.invokeStatic(main.clj:314)
在 clojure.main$main_opt.invoke(main.clj:310)
在 clojure.main$main.invokeStatic(main.clj:421)
在 clojure.main$main.doInvoke(main.clj:384)
在 clojure.lang.RestFn.invoke(RestFn.java:421)
在 clojure.lang.Var.invoke(Var.java:383)
在 clojure.lang.AFn.applyToHelper(AFn.java:156)
在 clojure.lang.Var.applyTo(Var.java:700)
在 clojure.main.main(main.java:37)