Я пытаюсь перевести некоторый код Java непосредственно в Clojure на Raspberry Pi. Я застрял в реализации интерфейса в вызове метода - addListener.
Я пробовал использовать reify, proxy и deftype. С reify я пытался дать компилятору как можно больше подсказок.
Это оригинальный код Java:
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
System.out.println(" --> GPIO PIN STATE CHANGE: " + event.getPin() + " = " + event.getState());
}
});
А это мой переведенный код Clojure:
(.addListener myButton
(reify GpioPinListenerDigital
(^void handleGpioPinDigitalStateChangeEvent [this ^GpioPinDigitalStateChangeEvent event]
(println (str " --> GPIO PIN STATE CHANGE: " (.getPin event) " = " (.getState event))))))
Я всегда получаю одну и ту же ошибку:
IllegalArgumentException Метод сопоставления не найден: addListener для класса com.pi4j.io.gpio.impl.GpioPinImpl clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)