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

欢迎!有关如何使用本站的信息,请参阅关于页面。

0
文档

问题

要获得例如 Enums 的恒定时间分派,即使用户知道 case,这也相当隐蔽。

建议

应该通过 包装宏,将 case 分派到任意常数,应该被记录。

措辞

  • 是否应该警告使用不稳定值的风险?
  • 是否应该提到除了 Java Enums 之外的其他内容?

Case 技术

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

有时这是合适的,例如,当在 java Enum 上分派时。
其他时候则不那么合适,例如,当在虚拟机重启时哈希值发生变化的对象上分派时(破坏 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 拖得太久,因为已经有一个 'condp' 可以像这样使用:

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

这是顺序的并且较慢,但与 plain case 相差不多。

但是,如果这是一个要替换 plain 'case' 的形式,则此应通过文献建议。

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