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.