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

欢迎!请查看关于页面,了解更多关于该功能的详细信息。

0
文档

问题

获取常量时间的派发对于示例中如枚举的情况非常困难,即使用户知道case。

建议

应该通过包装宏记录通过case对任意常量进行派发的可能性。

措辞

  • 是否应该警告使用不稳定值的风险?
  • 是否应该提到java枚举之外的任何内容?

Case 技术

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

有时这是适当的,例如在基于Java枚举进行派发时。
其他时候,则不这么认为,例如在基于当虚拟机重启时哈希变化的对象进行派发时会中断AOT时。

影响

这项技术是一个更通用技术的应用:将非字面量从另一个宏传递到宏中。
有其他宏有这样的使用案例吗?

参考

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

3 个回答

0

评论者:bendlas

-这是重复的- http://dev.clojure.org/jira/browse/CLJ-1367

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

0

评论者:petrglad

这个票证和CLJ-1367 linger了这么久可能是因为已经有'condp'可以使用,如下所示

(condp = test-value JavaClass/CONST1 result1 JavaClass/CONST2 result2)

这是顺序的,更慢,但与简单的case一样简洁。

然而,如果这是将要使用的形式而不是普通'case',则应在文档中提出建议。

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