编辑:已解决 我的问题来自两件事 - 我在defmacro某处出现语法错误。我删除它并编写了一个小函数,然后我可以访问(仅在重新启动repl之后)。最重要的第二个问题是,我不知道需要重新启动repl以识别我所做的任何更改。如果没有下面给出的具体答案,我们永远不会想到这一点=)。
我一直在使用github上的基础教程,它建议通过repl测试一些东西 - 我的问题是我找不到我感兴趣的命名空间/宏或函数。
user=> (require '(junkyard-client.html-templates))
nil
user=> (def t (junkyard-client-templates))
user=> CompilerException java.lang.RuntimeException: Unable to resolve symbol:
junkyard-client-templates in this context, compiling:
(C:\Users\Ben\AppData\Local\Temp\form-init3290053673397861360.clj:1:8)
我在语法上尝试了其他的东西,例如(require'junkyard-client.html-templates)。 这是基座教程中的v2.0.10:https://github.com/pedestal/app-tutorial/wiki/Slicing-Templates
编辑:这就是我想要的目标
(ns junkyard-client.html-templates
(:use [io.pedestal.app.templates :only [tfn dtfn tnodes]]))
(defmacro junkyard-client-templates
[]
{:junkyard-client-page (dtfn (tnodes "junkyard-client.html" "hello") #{:id})
:other-counter (dtfn (tnodes "tutorial-client.html" "other-counter") #{:id}
})
解决了阶段
答案 0 :(得分:1)
require
使命名空间在当前命名空间中可用,但不会使符号直接可用。除非使用:refer
或use
。
(require '[junkyard-client.html-templates])
(def t (junkyard-client.html-templates/junkyard-client-templates))
为方便起见,最好为命名空间设置别名或引用您正在使用的特定符号。
<强>别名:强>
(require '[junkyard-client.html-templates :as templates])
(def t (templates/junkyard-client-templates))
<强>参见:强>
(require '[junkyard-client.html-templates :refer [junkyard-client-templates]])
(def t (junkyard-client-templates))
注意: require
和:refer
通常优先于use
。