欢迎!请参阅关于页面了解更多这方面的信息。
我实际上在寻找 Clojure 版本的 Java import static。我理解这通常不是好的做法,但我正在使用 LWJGL,它有很多像 GLFW/glfwSetWindowPos 和 GLFW/glfwMakeContextCurrent 这样的静态方法,命名空间是方法名的一部分(因为它是 C 库的一个薄包装)。我发现这种重复增加了大量的视觉噪声,使得代码难以阅读,尤其是当双命名空间函数以双重命名空间的形式传递参数时
import static
GLFW/glfwSetWindowPos
GLFW/glfwMakeContextCurrent
(GL15/glCreateShader GL15/GL_VERTEX_SHADER)
我在https://clojure.github.io/clojure-contrib/import-static-api.html中找到了相关内容,但鉴于 clojure.contrib 已弃用,我更愿意不依赖于它。
不,没有等效的方案。您提供的链接是我所知的最好的这种实现。由于 clojure-contrib 库已经弃用且很旧,所以我恐怕不建议使用它。
从这里(链接)提供的源代码小极了,仅依赖于 clojure.set。所以……我只需复制 ns 或宏(注释来源于命名空间顶部许可证),看看它是否适合您的用法(可能,看起来不太复杂)。
另一种选择是将您大量使用的所有静态类方法封装在函数中。我也可以设想出做这件事的宏;你可能还想保留类型信息等。