clojure - Clojure-tagged literals::Raise an error-No dispatch macro for it
问题描述
tmp2/src/data_readers.clj
{ct/G tmp2.core/foo}
tmp2/src/tmp2/core.clj
(ns tmp2.core)
(defn foo
[x]
(println x "Hello, World!"))
(defn -main
[& args]
(println "Hello, World!")
(foo 123)
(#ct/G "abc"))
在项目目录中“lein run”时,显示结果“abc Hello, World!”,但报错。
Caused by: java.lang.RuntimeException: No dispatch macro for: c
at clojure.lang.Util.runtimeException(Util.java:221)
at clojure.lang.LispReader$DispatchReader.invoke(LispReader.java:851)
at clojure.lang.LispReader.read(LispReader.java:285)
at clojure.lang.LispReader.readDelimitedList(LispReader.java:1398)
at clojure.lang.LispReader$ListReader.invoke(LispReader.java:1243)
at clojure.lang.LispReader.read(LispReader.java:285)
at clojure.lang.LispReader.readDelimitedList(LispReader.java:1398)
at clojure.lang.LispReader$ListReader.invoke(LispReader.java:1243)
at clojure.lang.LispReader.read(LispReader.java:285)
at clojure.lang.LispReader.read(LispReader.java:216)
at clojure.lang.Compiler.load(Compiler.java:7630)
我应该在哪里更改代码?任何帮助,将不胜感激
解决方案
好的,开始工作了。
(ns tst.demo.core
(:use demo.core tupelo.core tupelo.test))
(defn foo
[x]
(println :foo-reader x)
x)
(dotest
(println :test-foo-plain)
(foo 123)
(println :test-foo-reader)
(println #ct/G "abc")
(println :test-leave))
请注意数据读取器文件的位置和内容。它必须位于类路径的根目录。在这种情况下是src/clj
:
~/expr/demo > cat src/clj/data_readers.clj
{ct/G tst.demo.core/foo}
和测试结果:
> lein test
:foo-reader abc ; <====== NOTICE!
-------------------------------
Clojure 1.10.1 Java 14
-------------------------------
:test-foo-plain
:foo-reader 123
:test-foo-reader
abc
:test-leave
请注意,在foo
读取源代码文件、编译或执行测试之前,会调用标记文字的读取器。
关于类路径的根
这由以下条目控制 Lein 项目projects.clj
:
:source-paths ["src/clj"]
:java-source-paths ["src/java"]
:test-paths ["test/clj"]
如果您没有clj
和java
位(某些项目也将cljc
和cljs
文件分割成单独的目录树),您将需要修改其中一个project.clj
或文件位置。
推荐阅读
- java - actionListener 和循环与 if-else 的组合
- c - C 编程:参数:无法转换为 int*
- c++ - 如何编写工厂方法;我在遵循 C++ 代码时出错
- node.js - WebSocket 错误,意外响应代码:200 与 Nginx 和 Node.js
- javascript - 在容器上设置的点击事件,正在子元素上调用并破坏逻辑
- python - Makedirs 正在创建文件而不是文件夹
- java - 如何在 JSP 中的表单的值字段中显示包含空格的字符串变量?
- django - Django返回响应而不通过views.py
- java - 您如何通过流程构建器将输入发送到 jar,同时还接收来自 jar 的输出
- python - 在第 21 行,它说存在语法错误。错误代码 e0001