2

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])。

4

1 回答 1

4

您应该在句柄定义中省略this,因为它是隐式声明的,如文档中所述

每个方法 fn 都有一个附加的隐式第一个参数,它绑定到 'this.

this使用reify时应显式设置

注意错误信息并不是说tail-file有错误,而是在tail-file: 中生成的某个函数中core/tail-file/fn--28,即fn--28。

于 2014-07-20T10:59:53.087 回答