2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以获得更多关于如何使用本站的信息。

+2
Clojure
编辑

我本质上是在寻找 Java 的 import static 的 Clojure 版本。我明白这通常是不好的实践,但我在使用 LWJGL,它有很多静态方法,如 GLFW/glfwSetWindowPosGLFW/glfwMakeContextCurrent,命名空间是方法名的一部分(因为是封装 C 库的瘦包装)。我发现这种重复增加了大量视觉噪音,使得代码更难以阅读,尤其是在双重命名空间函数将双重命名空间参数传递给函数时,例如

(GL15/glCreateShader GL15/GL_VERTEX_SHADER)

我在 https://clojure.github.io/clojure-contrib/import-static-api.html 中找到了信息,但是由于 clojure.contrib 已被弃用,我宁愿不依赖它。

2 个答案

+2

没有,没有等效的。你提供的那个链接是我所知道的类似实现中最优秀的一个。clojure-contrib 库已被弃用,现在相当陈旧了,所以我恐怕不会推荐使用它。

正是我所担心的事情。算了,还是谢谢。
+1

相关链接 的来源代码很小,只依赖于 clojure.set。所以……我只需要复制 ns 或宏(并在命名空间顶部的许可证中进行版权说明)并看看它是否适用于您的用例(可能,看起来不太复杂)。

另一种选择则是将您大量使用的所有静态类方法包装在函数中。我想象得到宏也可以做到这一点;你可能想保留类型信息等。

粗略看来,这就是 contrib 工具所做的工作。
...