ArityException:传递的args(2)数量错误

时间:2014-07-20 10:20:28

标签: clojure arity

有一些关于SO的相关问题,但我似乎无法弄清楚这一点。我有一个非常简单的测试代码:

(ns test
  (:gen-class)
  (:require [clojure.java.io :as io]))

(defn tail-file
  [path handler-func]
  (org.apache.commons.io.input.Tailer/create
     (io/file path)
     (proxy [org.apache.commons.io.input.TailerListenerAdapter] []
                   (handle [this line] (handler-func line)))))

(defn -main
  [& args]
  (tail-file "c:/tmp/test.txt" println)
  (read-line))

这导致:

Exception in thread "Thread-0" clojure.lang.ArityException: Wrong number of args (2) passed to: core/tail-file/fn--28

这很奇怪,因为tail-file有两个参数([path handler-func])。

1 个答案:

答案 0 :(得分:4)

您应该在句柄定义中省略this,因为它是docs

中所述的隐式声明
  

每个方法fn都需要另外一个隐含的第一个arg,它是绑定的   到'这个。

使用reify

时,应明确设置

this

请注意,错误消息并未说明尾文件中存在错误,但在尾文件中生成的某些函数中出现错误:core/tail-file/fn--28,即fn-28。