Estou tentando seguir este tutorial . Aqui está meu retorno:
(def cb (proxy [java.lang.Object GLFWKeyCallbackI] []
(invoke [window keycode _ action _]
(when (and (= keycode GLFW/GLFW_KEY_ESCAPE)
(= action GLFW/GLFW_PRESS))
(GLFW/glfwSetWindowShouldClose window true)))))
e aqui eu registro:
(GLFW/glfwSetKeyCallback window cb)
O que me dá esse erro:
Execution error (UnsupportedOperationException) at lwjgl_intro.core.proxy$java.lang.Object$GLFWKeyCallbackI$84f3fd50/address (REPL:-1).
address
Meu código completo está aqui .
Por que estou recebendo esse erro?
EDIT: Este é o trecho de código do tutorial linkado acima:
glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE )
glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop
});
Atualização: o texto riscado abaixo é irrelevante porque não notei a implementação padrão de
address
.No erro, você pode ver que o método que realmente foi chamado éaddress
, e seu proxy não o implementa.GLFWKeyCallbackI
estendeCallbackI
- é daí que vem esse método.Para que um tipo implemente todas as interfaces corretamente, ele precisa implementar todos os métodos em toda a cadeia de extensão da interface. E existem outros métodos além deaddress
andinvoke
, então yourproxy
precisa ser bastante estendido antes que você possa usá-lo corretamente.Além disso, não há necessidade de especificar
java.lang.Object
isso: todos os tipos já o herdam por padrão, implicitamente.Você pode usar
reify
em vez disso: