当前位置: 首页 > 知识库问答 >
问题:

IllegalArgumentException:没有实现方法::作为协议的文件:#'clojure。JAVA为类clojure找到io/强制。语言符号

葛成济
2023-03-14

我正在尝试从ClojureScript编写一个宏来处理试剂应用程序的文件I/O。我得到这个错误:

IllegalArgumentException: No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.Symbol

当我试图做到以下几点:

(def file-string "/Users/luciano/Dropbox/projects/test/resources/blog/test.md")
(get-file file-string)

但我可以做得很好:

(get-file "/Users/luciano/Dropbox/projects/test/resources/blog/test.md")

这是宏:

(defmacro get-file [fname]
  (slurp (io/file fname)))

我做错了什么?

共有2个答案

宓弘壮
2023-03-14

您不应该为此使用宏。

宏最好被视为嵌入源代码中的编译器扩展。

您只需要一个常规函数,如:

(defn get-file 
  [fname]
  (slurp (io/file fname)))

至于从试剂应用程序执行I/O,我不确定您的目标是什么。

赫连鸿振
2023-03-14

这意味着您试图用一个在运行时没有值的符号调用宏。

(def my-file "foo.txt")
(def file-str (get-file my-file))

将工作而

(defn foo [s]
  (get-file s))

(foo "foo.txt")

不会。

 类似资料:
  • 获取java。lang.IllegalArgumentException:没有实现方法::作为协议的文件:#'clojure。JAVA为类clojure找到io/强制。当我在MAC OS X上从终端运行lein test或lein repl时,lang.PersistentVector。尽管lein repl在eclipse中运行良好(使用逆时针插件) 我的项目文件是:

  • 我正在尝试使用leiningen创建一个多目标项目,因此我让它生成多个不同的jar文件,这是我创建的项目文件: 它不断返回错误,我不知道它到底出了什么问题

  • 我正在使用clojure-1.5。1,compojure-1.1。5,克罗斯塔什-1.3。1. 模板文件位于资源/公共/模板文件夹下。 代码: 对Clostache渲染资源的调用引发以下异常:

  • 我对Clojure很陌生,玩得很开心。有一件事我遇到了一些麻烦,那就是如何阅读错误,我个人认为它们不是很具有描述性,但这可能是由于我的“新手”。 例如,我现在遇到的问题是当我尝试启动我的环形服务器时(如果需要,我可以提供更多详细信息): 这对我来说太模糊了,我怎么知道我做错了什么?我不记得和任何“制造阅读器”、协议或IOFactory打过交道。

  • Clojure 语法 Lisp方言有一个非常简洁的语法 — 有些人觉得很美的语法。数据和代码的表达形式是一样的,一个列表的列表很自然地在内存里面表达成一个tree。(a b c)表示一个对函数a的调用,而参数是b和c。如果要表示数据,你需要使用 '(a b c) o或者 (quote (a b c)) 。通常情况下就是这样了,除了一些特殊情况 — 到底有多少特殊情况取决于你所使用的方言。 我们把这

  • 本文向大家介绍go语言实现的memcache协议服务的方法,包括了go语言实现的memcache协议服务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现的memcache协议服务的方法。分享给大家供大家参考。具体如下: 完整实例代码点击此处本站下载。 1. Go语言代码如下: 2. Go语言代码: 3. Go语言代码如下: 希望本文所述对大家的Go语言程序设计有所帮助。