我正在尝试将一些 Java 代码直接翻译成树莓派上的 Clojure。我坚持在方法调用中实现接口 - 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 未找到匹配方法:com.pi4j.io.gpio.impl.GpioPinImpl clojure.lang.Reflector.invokeMatchingMethod 类的 addListener (Reflector.java:79)