ArityException: неверное количество аргументов (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]).

1 ответ

Решение

Вы должны опустить this в определении дескриптора, так как он объявлен неявно, как указано в документах

Каждый метод fn принимает дополнительный неявный первый аргумент, который связан с этим.

this должен быть явно установлен при использовании reify

Обратите внимание, что в сообщении об ошибке не указано, что произошла ошибка в tail-файле, но в некоторой функции, сгенерированной в tail-файле: core/tail-file/fn--28а именно, фн -28.

Другие вопросы по тегам