从 clojure 调用带有可选 null 参数的 java 函数
Calling a java function with an optionally null argument from clojure
我正在尝试弄清楚如何直接从 clojure 中使用 LWJGL3。到目前为止我发现的唯一绊脚石是有时需要参数为 null
的函数,但它的类型在指纹中为 long
。
有问题的具体函数是 org.lwjgl.glfw.GLFW
class 中的 glfwCreateWindow
。
最后两个参数是 long
,但是当使用窗口模式时,第一个参数应该是 null
,第二个参数不共享 gl 上下文。
问题是互操作调用检查函数的指纹并发现它应该是 long
,因此传递 nil
会导致 IllegalArgumentException
.
我环顾四周,但似乎没有人解决过这个特定问题。这与 nil-punning 无关,因为参数 should 有时是 nil.
这是我已经可以使用的代码:https://gist.github.com/Efimero/2c0af4ae3aeaf2c85136aa06ff077919
但这只是因为默认零值适合我的设置,但它们不是抽象的。
当我通过nil
时,我希望函数可以正常调用,但是我得到一个异常。
这没有意义。 long
不能在任何地方为空。这似乎是文档中的错误传达,其中包装的 C 或 C++ 库泄漏了。
我强烈猜测在文档显示 NULL
的地方传递 0
是正确的。
我正在尝试弄清楚如何直接从 clojure 中使用 LWJGL3。到目前为止我发现的唯一绊脚石是有时需要参数为 null
的函数,但它的类型在指纹中为 long
。
有问题的具体函数是 org.lwjgl.glfw.GLFW
class 中的 glfwCreateWindow
。
最后两个参数是 long
,但是当使用窗口模式时,第一个参数应该是 null
,第二个参数不共享 gl 上下文。
问题是互操作调用检查函数的指纹并发现它应该是 long
,因此传递 nil
会导致 IllegalArgumentException
.
我环顾四周,但似乎没有人解决过这个特定问题。这与 nil-punning 无关,因为参数 should 有时是 nil.
这是我已经可以使用的代码:https://gist.github.com/Efimero/2c0af4ae3aeaf2c85136aa06ff077919
但这只是因为默认零值适合我的设置,但它们不是抽象的。
当我通过nil
时,我希望函数可以正常调用,但是我得到一个异常。
这没有意义。 long
不能在任何地方为空。这似乎是文档中的错误传达,其中包装的 C 或 C++ 库泄漏了。
我强烈猜测在文档显示 NULL
的地方传递 0
是正确的。