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

欢迎!请参阅 关于 页面,了解更多关于这个是如何工作的信息。

0
文档

问题

要获取枚举(例子)等的常数时间调度,即使用户知道case命令,也是非常神秘的。

提议

应该通过宏包装来记录使用case将任意常量调度的情况。

措辞

  • 应该对使用不稳定值进行警告吗?
  • 除了Java枚举之外,还应提及其他内容吗?

Case技术

Case已记录为接受所有可读形式作为测试-常数。但是,通过将其包装在另一个宏中,也可以将其设置为使用任何编译时已知常量作为测试-常数。

有时这是合适的,例如在根据Java枚举进行调度时。
其他时候,不那么合适,例如,当根据重新启动VM时hash发生变化的对象进行调度时(破坏AOT)。

影响

这是一种更一般技术的应用:将非字面量从另一个宏传递到宏。
还有其他具有类似用例的宏吗?

参考文献

https://groups.google.com/d/topic/clojure/3yGjDO2YnjQ/discussion

3 答案

0

评论者:bendlas

-这是一个重复的问题

实际上,这是一个替代方案

0

评论者:petrglad

可能就是这个票据和CLJ-1367长时间悬挂的原因,因为已经有'condp'可以这样做

(condp = 测试值 JavaClass/CONST1 结果1 JavaClass/CONST2 结果2)

这是顺序的,较慢,但与plain case一样简洁。

然而,如果这个表单将替代普通的'case'使用,则应由文档建议这一点。

0
参考:[https://clojure.atlassian.net/browse/CLJ-1368](https://clojure.atlassian.net/browse/CLJ-1368)(由bendlas报告)
...