【问题标题】:Calling a java function with an optionally null argument from clojure从 clojure 调用带有可选 null 参数的 java 函数
【发布时间】:2019-05-09 15:50:56
【问题描述】:

我想弄清楚如何直接从 clojure 使用 LWJGL3。到目前为止,我发现的唯一绊脚石是一个有时需要参数为null 的函数,但它的类型是指纹中的long。 有问题的具体函数是来自org.lwjgl.glfw.GLFW 类的glfwCreateWindow​。 最后两个参数是long,但是当使用窗口模式时,它们应该是null,对于第一个,或者不共享gl上下文,对于第二个。 问题是互操作调用检查函数的指纹并看到它应该是long,因此传递nil 会导致IllegalArgumentException

我环顾四周,但似乎没有人解决这个特殊问题。这不是关于 nil-punning,因为参数应该有时是 nil。

这是我已经可以使用的代码:https://gist.github.com/Efimero/2c0af4ae3aeaf2c85136aa06ff077919

但这只是因为默认零值适合我的设置,但它们不是抽象的。

当我通过nil 时,我希望函数能够正常调用,但我得到了一个异常。

【问题讨论】:

    标签: java clojure clojure-java-interop


    【解决方案1】:

    这没有意义。 long 在任何地方都不能为空。似乎这是文档中的错误传达,包装的 C 或 C++ 库泄漏了。

    我强烈猜测在文档中提到 NULL 的地方传递 0 是正确的。

    【讨论】:

    • 我是这么想的,但你自己检查一下:javadoc.lwjgl.org/org/lwjgl/glfw/… 你使用 null 来不共享上下文。
    • 在 C 中,0 == NULL(实际上这里有微妙之处,但是 wtf)。我同意这个文档只是底层的 C 戳穿。没有办法为未装箱的 long 传递 null。
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2020-12-09
    相关资源
    最近更新 更多